SQL mysql_num_rows & LIMIT ?

Rockhound

Lt. Commander
Registriert
Jan. 2003
Beiträge
1.540
Hallo, etwas schwer einen Titel zu finden für meine Frage.

Ich habe eine Datenbank mit z.b. Kontakten [Name|Str.|PLZ|Str.|Ort|Bundesland(INT)|Telefon]
Nun möchte ich eine Abfrage machen nach dem Bundesland Ba-Wü (2) und er soll mir aber nur 10 Einträge anzeigen! Mit einem [Weiter]-Button kommen dann die nächsten 10. Und er soll mir aber auch anzeigen wieviele Einträge es in meiner Datenbank gibt mit Bundesland=2. Habe das jetzt mal so gelöst:

PHP:
$res_data = mysql_db_query("datenbankname","SELECT k.name, k.str, k.plz, k.ort, k.bundesland, k.telefon FROM kontakte k WHERE k.bundesland = 2 LIMIT 10")
$res_anzahl = mysql_db_query("datenbankname","SELECT k.name, k.str, k.plz, k.ort, k.bundesland, k.telefon FROM kontakte k WHERE k.bundesland = 2")
$num_anzahl = mysql_num_rows($res_anzahl);

Zwei Datenbankabfragen sind nicht so schön wie ich finde. Die erste holt meine Daten raus (Ausgabe erfolgt später) und die zweite zeigt mir an wie viele Einträge es wirklich gibt. Funktionieren tut es, aber ich habe nun mehr als 8500 Einträge in der Datenbank und die doppelte Abfrage verlangsamt das natürlich :(

Hat mir jemand einen Tipp wie ich das eleganter lösen könnte?

Vielen Dank.
 
Setze hinter das SELECT ein SQL_CALC_FOUND_ROWS:

Code:
SELECT SQL_CALC_FOUND_ROWS k.name, ... LIMIT 10

Danach bekommst du die Gesamtanzahl mit

Code:
SELECT FOUND_ROWS()
 
Zuletzt bearbeitet:
Ja, ich habe jetzt die Methode von stackoverflow.com mal eingebaut. Ist 30% schneller die Abfrage bei meiner Datenbank.

Danke Euch beiden.
 
Ein großer Fehler war, dass du kein count(*) (oder noch besser: count(id)) verwendet hast, sondern dir das komplette Result Set zurückgeben lassen. Falls du phpMyAdmin zur Hand hast, da kannst du die Laufzeiten von Querys schön grafisch visualisieren. Große Result Sets mit zig Spalten brauchen schlichtweg länger, weil eben signifikant mehr Daten durchgeschleift werden müssen. Die meisten dieser Daten sind aber totaler Tinnef. Du willst ja nur wissen, wie viele Daten es sind, nicht was für welche.
 
Zurück
Oben