Schorsch: Mysql: Resultatpackete... Wie geht das?

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

  1. 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

    1. 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

      1. 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!

  2. 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

    1. 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

  3. 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

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau