LIMIT Eingrenzung mit nur einer Abfrage (für Seitenzahlen)
muenzchen
- php
Hallo,
Ich habe eine Liste von verschiedenen Dingen. Diese Liste kann in PHP durchbelättert werden, es gibt also mehrere Seiten. Den Inhalt der Liste lese ich mit LIMIT aus einer MySQL Datenbank aus. Die LIMIT Grenzen werden natürlich dynamisch berechnet und genau da liegt jetzt mein Problem. Aus der aktuellen Seitenzahl heraus kann ich mir zwar die Eingrenzungen berechnen, da ich aber natürlich vorher nicht weiß wieviele Datensätze es insgesamt gibt, weiß ich auch nicht ob die Seitenzahl nicht ungültig ist. Ich müsste die Abfrage also 2 mal ausführen, was nur mehr Zeit und Aufwand kostet. Da die Liste auch noch nach verschiedenen Kriterien angezeigt werden kann, reicht auch kein einfaches COUNT(*) sondern ich müsste bei beiden Abfragen mit komplizierten WHERE und JOIN Angaben abfragen, weil sich so die Anzahl der Datensätze und somit auch der Seiten individuell verändert. Mir fällt aber leider keine andere Lösung ein.
Weiß vielleicht jemand eine?
MfG, muenzchen
hi,
Aus der aktuellen Seitenzahl heraus kann ich mir zwar die Eingrenzungen berechnen, da ich aber natürlich vorher nicht weiß wieviele Datensätze es insgesamt gibt, weiß ich auch nicht ob die Seitenzahl nicht ungültig ist. Ich müsste die Abfrage also 2 mal ausführen
warum? wenn die LIMIT-parameter "zu hoch" sind, bekommst du halt keine ergebnisdatensätze von der DB zurück - also frage das doch einfach ab.
gruss,
wahsaga
Hello,
warum? wenn die LIMIT-parameter "zu hoch" sind, bekommst du halt keine ergebnisdatensätze von der DB zurück - also frage das doch einfach ab.
$res = mysql_query(...)
Genau, und wenn $res > 0 und mysql_num_rows($res) == 0 ist,
darf nicht mehr weiter geblättert werden und "eof erreicht" wird angezeigt. Einen Blätterversuch musst Du aber zulassen, da ja zwischendurch Datensätze hinzugekommen sein könnten.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo,
warum? wenn die LIMIT-parameter "zu hoch" sind, bekommst du halt keine ergebnisdatensätze von der DB zurück - also frage das doch einfach ab.
Ja, nur wenn ich dann automatisch Seite 1 anzeigen will, gets eben wieder nur mit einer 2. Abfrage.
MfG, muenzchen
hi,
warum? wenn die LIMIT-parameter "zu hoch" sind, bekommst du halt keine ergebnisdatensätze von der DB zurück - also frage das doch einfach ab.
Ja, nur wenn ich dann automatisch Seite 1 anzeigen will, gets eben wieder nur mit einer 2. Abfrage.
in dem falle würde ich einfach per location-header wieder auf script.php?seite=1 umleiten.
gruss,
wahsaga
Hallo,
ABer wie gesagt kann der User nach verschiedenen Kriterien auslesen lassen. Wenn unter der Anfrage wirklich nichts gefunden wird, brauche ich ja auch keine Seite 1. Also ich glaube mit einer Abfrage kommt man da gar nicht durch.
MfG, muenzchen
Hello,
Also ich glaube mit einer Abfrage kommt man da gar nicht durch.
Korrekt, wenn Du vorher die Anzahl der Seiten bestimmen willst, musst Du immer erst ein
select count(*) from $table $filter;
durchführen. Bedenke aber, dass in dynamischen Datenbeständen zwischen dem Zählen und dem Select für die Datenbeschaffung schon wieder alles ganz anders sein kann. Da kann sich durchaus eine andere Connection mit einem "Multiinsert" oder einem delete dazwischenmogeln. Ob MySQL in der aktuellen Version mehrere Statements Common (also mit "Zischenmogelschutz") ausführen kann, weiß ich leider nicht. Ich konnte nichts finden unter dem Stichwort.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo,
Ich habe eine Liste von verschiedenen Dingen. Diese Liste kann in PHP durchbelättert werden, es gibt also mehrere Seiten. Den Inhalt der Liste lese ich mit LIMIT aus einer MySQL Datenbank aus. Die LIMIT Grenzen werden natürlich dynamisch berechnet und genau da liegt jetzt mein Problem. Aus der aktuellen Seitenzahl heraus kann ich mir zwar die Eingrenzungen berechnen, da ich aber natürlich vorher nicht weiß wieviele Datensätze es insgesamt gibt, weiß ich auch nicht ob die Seitenzahl nicht ungültig ist. Ich müsste die Abfrage also 2 mal ausführen, was nur mehr Zeit und Aufwand kostet. Da die Liste auch noch nach verschiedenen Kriterien angezeigt werden kann, reicht auch kein einfaches COUNT(*) sondern ich müsste bei beiden Abfragen mit komplizierten WHERE und JOIN Angaben abfragen, weil sich so die Anzahl der Datensätze und somit auch der Seiten individuell verändert. Mir fällt aber leider keine andere Lösung ein.
Weiß vielleicht jemand eine?MfG, muenzchen
sorry aber aus der beschreibung werd ich zumindest nicht schlau ;)
poste doch bitte 'nen beispiel dump (struktur und 1-2 datensätze) damit ich dir halbwegs folgen kann; im Ansatz kenn ich das Problem nämlich, hab es auch gelöst, weiß aber nicht ob das jetzt speziell bei dir auch der fall ist, gruß
august
Hallo,
das ist alles nicht notwendig. Ich habe ja bereits eine fertige Blätterfunktion nur eben mit 2x der gleichen Abfrage. Die erste um herauszufinden wieviele Datensätze die Abfrage zurückgibt. Daraus kann ich dann natrlich leicht feststellen ob die aktuelle Seite gültig ist. Und die 2. Abfrage dann für die Ausgabe. Ich würds aber gerne mit einer Abfrage schaffen.
MfG, muenzchen