Moin!
wenn ich da mal kurz dazwischenfunken dürfte. Rouven hat dir zwei sinnvolle Funktionen genannt, um Ergebnisse aus einem Ressource-Handle herauszubekommen.
Die einfachste Art, dies zu tun, ist aber die Funktion mysql_result(). Die zwei von Rouven genannten Funktionen sind ein bisschen zu komplex, man kann es da (in diesem Fall) wirklich einfacher mit mysql_result haben.
Finde ich nicht. mysql_fetch_assoc() liefert ein ziemlich simpel handhabbares Resultat. Bei mysql_result() hat man keine nennenswerte Vereinfachung - sie wird nur verlagert.
AABER:
Wieso zählst du denn die Zeilen schon in der MySQL-Syntax? Nimm doch die Funktion mysql_num_rows. Wenn dein Projekt für das du den gefragten Code brauchst sehr gut besucht sein wird, ist es wirklich sinnvoller, mysql_num_rows zu nehmen, um den MySQL-Server nicht unnötig zu belasten.
Mit diesem Statement outest du dich als kompletter Anfänger.
Wenn man mit MySQL "SELECT COUNT(*) FROM tabelle" macht, schaut MySQL ganz schnell nach, wieviele Datensätze in der Tabelle gespeichert sind, und überträgt exakt eine Zahl in den PHP-Puffer.
Dein Vorschlag würde bedeuten, dass man "SELECT * FROM tabelle" machen muß. MySQL liest dann nicht schnell aus der Indextabelle, sondern muß die gesamte Tabelle auslesen und in den PHP-Puffer übertragen. Bei kleinen Tabellen sicher kein riesiger Unterschied, aber wenn mehrere zehntausend Datensätze in der Tabelle stehen, wird der Unterschied immer größer. Und das GERADE BEI stark besuchten Projekten.
Abgesehen davon: Das COUNT-Ergebnis benötigt viel weniger Bytes im PHP-Speicher (der begrenzt ist!), als die komplette Tabelle.
Mir ist es schon ein mal passiert, dass plötzlich der MySQL-Server angedankt hat, weil ich einen Query zu viel abgesetzt habe. Der war auch noch dummerweise in einer for-Schleife zusammen mit einem anderen Query, die 300 mal durchlaufen wurde. Kaum online gestellt, schon gehen 30 Benutzer gleichzeitig auf die Seite (auch noch die Startseite) und ich bekam die Krise, weil plötzlich _gar nichts_ mehr ging.
Dann hast du einen strukturellen Fehler in deinem Datendesign oder deiner Abfragetaktik gemacht. Das dürfte deiner wenigen Erfahrung zuzuschreiben sein, denn du offenbarst ganz deutlich, dass du noch an den Anfängen deiner Datenbankerfahrung stehst.
Nur so als Hinweis: Für eine einzige Seitendarstellung in einer Schleife 300 Querys abzusetzen ist ganz ganz schlecht, da kann man mit Sicherheit sehr viel optimieren. Und ein Schritt dieser Optimierung ist, eben nur exakt das abzufragen, was man von der Datenbank wirklich wissen will, keinesfalls mehr.
Wenn nur die Anzahl der Datensätze einer Tabelle gebraucht wird, fragt man sie eben mit COUNT ab - und nicht stattdessen die ganze Tabelle. Daran geht die Performance einer Datenbank nämlich auch schnell zu Ende.
Wie gut dein Projekt besucht sein wird, weiß ich nicht. Ich empfehle aber, lieber jetzt schon unnötige Querys wegzulassen.
Wenn die gesamte Tabelle bereits abgefragt wurde, hättest du Recht, die Dopplung wäre vermeidbar. Davon ist aber nach Lage der Information nicht auszugehen.
- Sven Rautenberg
"Love your nation - respect the others."