Anzahl der Daten einer Abfrage ermitteln

MC-René

Erfahrenes Mitglied
Hallo!

Ich denke es gibt ne einfacherer Lösung um die Anzahl einer Abfrage zu ermitteln als diese:

PHP:
$sql1="SELECT * FROM tabelle WHERE Aktiv='1'";
$sql11=mysql_query($sql1);
while ($ergebnis=@mysql_fetch_array($sql11))
{
$anzahl++;
}
echo $anzahl;
 
Oder, wenn du nur die Anzahl der Daten aber nicht die Daten selbst haben willst kannst du dies auch direkt in SQL tun:
PHP:
$sql1="SELECT COUNT(*) as Anzahl FROM tabelle WHERE Aktiv='1'"; 
$sql11=mysql_query($sql1); 
$ergebnis=@mysql_fetch_array($sql11)
$anzahl = $ergebnis['Anzahl'] ;
 
SELECT COUNT(*) ist wohl eher nicht so dolle, was Performance angeht. Dann doch lieber die MySQL-internen Zähler verwenden:

SQL:
SELECT TABLE_ROWS
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'mydatabase'
AND TABLE_NAME = 'my_very_important_table';
Zeige Datensätze 0 - 0 (1 insgesamt, die Abfrage dauerte 0.0008 sek.)

Edit: Hier mal zum Vergleich mein Query [1] und SELECT COUNT(*) [2]

[1]
Code:
Status 	Dauer
starting 	0.000035
Opening tables 	0.000126
System lock 	0.000001
Table lock 	0.000005
init 	0.000018
optimizing 	0.000009
statistics 	0.000007
preparing 	0.000008
executing 	0.000004
checking permissions 	0.000036
Opening tables 	0.000306
Sending data 	0.000013
end 	0.000002
query end 	0.000001
freeing items 	0.000029
removing tmp table 	0.000005
closing tables 	0.000001
logging slow query 	0.000001
cleaning up 	0.000001

1 	SIMPLE 	TABLES 	ALL 	NULL 	TABLE_SCHEMA,TABLE_NAME 	NULL 	NULL 	NULL 	Using where; Open_full_table; Scanned 0 databases

[2]
Code:
starting 	0.000032
Opening tables 	0.000114
System lock 	0.000002
Table lock 	0.000004
init 	0.000009
optimizing 	0.000003
statistics 	0.000007
preparing 	0.000005
executing 	0.000003
Sending data 	0.000118
end 	0.000002
query end 	0.000001
freeing items 	0.000025
logging slow query 	0.000000
cleaning up 	0.000002

1 	SIMPLE 	countries 	index 	NULL 	PRIMARY 	4 	NULL 	240 	Using index

Richtig schlimm wird das, wenn kein Index in der Tabelle existiert (sollte normal nicht vorkommen, aber man weiß ja nie).

EDIT: ICH NEHME ALLES ZURÜCK UND BEHAUPTE DAS GEGENTEIL. Hätte ich nie gedacht, da sein SELECT COUNT() schneller ist, als ein Zugriff auf die Information Schemata. Tja, man lernt nie aus.
 
Zuletzt bearbeitet:
Das funktioniert dann aber auch nur, wenn man die Anzahl aller Zeilen haben will... durch die Bedingung "WHRER active = 1" kommt man um das COUNT() wohl nicht drumrumm... jedenfalls auf SQL-Seite ;-)
 
Zurück