Anzahl aller Einträge einer SQL Tabelle trotz LIMIT

dobermant

Erfahrenes Mitglied
Guten Abend,

Ich habe eine SQL Tabelle, mit mehreren 10000 Einträgen, und frage diese per LIMIT ab weil ja nicht alle Einträge bei der Ausgabe auf eine Seite passen.

Wie bekomme ich trotzdem die Anzahl aller Einträge dieser besagten Tabelle, ohne nochmal eine 2. SQL Abfrage zu starten...

Besten Dank,

dober
 
Hi,

es gibt da zwei Wege:

1. Du macht eine Abfrage über die gesamte Tabelle und bestimmt offset und count manuell wenn Du über die Tabelle iterieren willst.

2. Du passt Deine SQL-Abfrage so an, dass Sie dir in einer Spalte die Anzahl aller Einträge in der Datenbank ausgibt. Hierfür brauchst Du dann eine Group by Klausel. Die Zahl steht dann zwar in jeder Zeile, aber Du kannst Sie direkt aus dem Ergebnis abrufen.

Die Erste Methode ist recht speicherlastig, aber einfach. Die zweite komplexer und rechenintensiver.

Wenn Du aber wirklich nur die Anzahl der Einträge haben willst empfehle ich Dir eine zweite Abfrage mittels count.

Marcus.
 
So, zweiter Versuch...
Wie wäre es mit einem Subselect?

SQL:
SELECT col1, col2, (SELECT count(*) FROM `table`) AS sum_total 
FROM `table`
LIMIT 1
 
Eine Alternative wäre die Option SQL_CALC_FOUND_ROWS, mit der zusätzlich die Anzahl der ausgewählten Datensätze gespeichert wird. Dafür ist dann allerdings eine weitere Abfrage mit FOUND_ROWS() notwendig.
 
So, zweiter Versuch...
Wie wäre es mit einem Subselect?

SQL:
SELECT col1, col2, (SELECT count(*) FROM `table`) AS sum_total 
FROM `table`
WHERE col ='' 
LIMIT 1

ich muss nochmal nachfragen...sorry, habe vergessen, dass ich
eine WHERE Clausel mit drinne habe. diese wird vom SubSelect nicht berücksicht oder?

Ich möchte aber das die WHERE Clausel berücksichtigt wird, nur das LIMIT soll ignoriert werden

danke, dober
 
Zuletzt bearbeitet:
Hallo dober,

ich muss nochmal nachfragen...sorry, habe vergessen, dass ich
eine WHERE Clausel mit drinne habe. diese wird vom SubSelect nicht berücksicht oder?

Ich möchte aber das die WHERE Clausel berücksichtigt wird, nur das LIMIT soll ignoriert werden

Dann musst du in der Subquery ebenfalls die Bedingung anpassen:

SQL:
SELECT col1, 
       col2,
       (SELECT count(*) 
          FROM tab
         WHERE col='xyz') AS sum_total 
FROM tab
WHERE col ='xyz' 
LIMIT 1

und nochmal noch zu deiner anderen Frage:

sollte ich das count(*) noch auf count(id) beschränken?

Falls du COUNT() mit einer Spaltenangabe verwendest, bekommst du die Anzahl der Einträge, in denen diese Spalte nicht NULL ist. Wenn deine Spalte auch NULL-Werte zulässt ergeben sich also Unterschiede zu COUNT(*)

Markus
 

Neue Beiträge

Zurück