Mysql: Resultatpackete... Wie geht das?
Schorsch
- php
Tach
Der User kann in eine Suchmaske verschiedene Dinge Angeben. Daraus gibt's dann eine MySQL Suchabfrage mit z.B. 63 Treffer. Nun möchte ich die ersten 10 Treffer darstellen und unten jeweils die weiteren 10 Treffer als Link darstellen. Etwa so:
[11-20][21-30][31-40][41-50][51-60][61-63]
1.Ich limitiere die MySQL-Abfrage mit 'LIMIT 0,10'
Nun gut, aber woher weiss ich dann, wie viel Treffer es total gibt?
DAs muss ich ja trozdem wissen, auch wenn ich nur die ersten 10
darstellen will.
Muss ich 2 MySQL-Abfragen starten? Macht das Sinn?
Weiter muss ich die Sucheingaben oder die MySQL Suchabfrage
auf die nächste Seite mitschleppen, damit dieselbe Abfrage dann
mit 'LIMIT 11, 20' abgehen kann...
2.Ich mache eine MySQL-Abfrage ohne LIMIT
Stelle aber nur die ersten 10 dar.
Allerdings muss ich so den ganzen Resultat-Array (der ja
sehr heftig sein kann) von der einen zur nächsten SEite
schleppen. Macht das Sinn?
Die Frage lautet also:
"Wie löst man die Resultatpackerei?"
Was habt ihr da für Ideen, Erfahrungen und Tipps?
Gruss
Schorsch
Hi!
Ich würde es folgendermaßen realisieren:
Ich würde nach allen Suchen, dann die IDs in eine Tabelle speichern
Jetzt brauchst du nur mehr die gesamten Daten der ersten 10 Datensätze suchen und sie ausgeben. In der Url gibst du jeweils mit, wo du dich gerade befindest. Und jedesmal wenn der Benutzer neu sucht löscht du die IDs (Sessionabhängig)
Praktisch:
1. 0 (0-10)
2. 1 (11-20)
3. 2 (21-30)
usw.
Grüsse
Andi
Hi!
Ich würde nach allen Suchen, dann die IDs in eine Tabelle speichern
Interessanter Ansatz! Vielen Dank!
Ich persönlich würde aber Anstelle der eher die SQL-Suchabfrage speichern (ist allemal leichter als eine temp Tabelle mit 150 Einträgen... oder?) und dann per LIMIT steuern, welche Datensätze ausgegeben werden sollen...
Gruss
Schorsch
Hi!
Ich persönlich würde aber Anstelle der eher die SQL-Suchabfrage speichern (ist allemal leichter als eine temp Tabelle mit 150 Einträgen... oder?) und dann per LIMIT steuern, welche Datensätze ausgegeben werden sollen...
Nein ich meine dass nicht so.
Alle IDs in ein Datenfeld
z.B.: 1,2,5,6,7,9,8,11,45,145 usw.
Dann die ersten 10 holen usw.
Kann man aber auch das ganze array speichern.
Grüsse
Andi!
Tach
Moin!
Was habt ihr da für Ideen, Erfahrungen und Tipps?
Vielleicht hilft Dir dieses HowTo weiter:
http://www.dclp-faq.de/q/q-mysql-seitenweise.html
Gruss
Schorsch
Gruß
Maresa
Tach
Vielleicht hilft Dir dieses HowTo weiter:
http://www.dclp-faq.de/q/q-mysql-seitenweise.html
Vielen Dank für den Tipp!
Also doch 2 MySQL Abfragen (eine für Datensätze (z.B. 1-10) und die andere für Anzahl Datensätze insgesamt)und ein weitergeben der Usereingaben, resp. der WHERE Bedingungen...
Gruss
Schorsch
Hello,
du sprichst den Unterscheid zwischen dynamischer Abfrage und Snapshot.
Ein Snapshot (Kollektion während eines einzigen Zeit"punktes") funktioniert sinnvoll aber nur mit einer Session. Sicher haben deine Datensätze einen Primärschlüssel. Diese Schlüssel kannst Du Dir in der Session merken und dann später bei jedem Seitenaufruf die nächsten zehn davon in Inhalte verwandeln.
select ID_<tabelle> from <tabelle> where <bedingung>;
abspeichern in einem Array in $_SESSION
dann auf jeder Seite die nächsten holen und
select <fields> from <tabelle> where ID_<tabelle> in (<idliste>);
Sonst musst Du den Suchstring von Seite zu Seite mitschleppen sowie die Seitennummer. Alles andere lässt sich berechenen. Wenn der Datenbestand aber sehr dynamisch ist (Beispiel: die "Onlinesuche" einer Singlecommunity), dann ist das dynamsiche Verfahren äußerst Benutzerunfreundlich, da beim weiterblättern (die neuesten stehen vorne) immer wieder schon gesehene Teilnehmer in der nächsten Seite auftauchen.
Das Snapshot-Verfahren entspricht nach eigehenden Untersuchungen einer Gruppe von "Software-Psychologen" der TU BS mehr dem menschlichen Verhalten und der Erwartungshaltung. Es ist nur begrenzt durch die Speicherkapazität der Session, denn bei 1.000.000 Treffern kann man die IDs nicht mehr so einfach unterbringen.
Liebe Grüße aus http://www.braunschweig.de
Tom