David: Ergebnisse auf mehrere Seiten aufteilen.

Hallo,

ich versuche grade die Ergebnisse einer mySQL-Datenbankabfrage mit PHP so aufzuteilen, dass immer
10 Ergebnisse pro Seite angezeigt werden.

Trotz diverser Versuche habe ich es einfach nicht hingekriegt.

Hat irgendjemand so ein script zufällig bei sich rumliegen?
Oder eine Idee, wie das gehen könnte?

Danke!
David

  1. Hi David,
    öhm ganz einfach :

    $sqlst = "SELECT * From bla ORDER BY bla2";
      $conn_test = mysql_db_query($dbName,$sqlst,$li);

    if (!$start) then $start = 0;
    $count = $start;

    while ($rs_test = mysql_fetch_array($conn_test) AND $count <= $start + 10)
    {
      print rs_test[bla2];
      print "<a href="$PHP_SELF?start=$start + 10">Next</a>";
    }

    Sind vielleicht noch fehler drin, aber im großen und ganze funzt es so !

    1. Klar sind noch fehler drin :

      while ($rs_test = mysql_fetch_array($conn_test) AND $count <= $start + 10)
      {
        print rs_test[bla2];
        print "<a href="$PHP_SELF?start=$start + 10">Next</a>";
        $count += 10;
      }
        
      jezz hoffentlich :)

      1. $count += 1;

        ARGL !

  2. Oder eine Idee, wie das gehen könnte?

    Ich fange eine Ebene höher an als Robert.
    Welche Treffermengen hast Du zu erwarten, und welche Suchdauer?

    Bei kleiner Treffermenge ist die "triviale" Architektur ausreichend:
    1. dem CGI-Skript einen Offset als Parameter mitgeben (anfangs 0, im generierten Link auf die nächsten 10 Treffer jeweils 10 mehr usw.)
    2. alle Treffer berechnen
    3. nur diejenigen ausgeben, die erwünscht sind.
    (Das Archiv-Suchskript dieses Forums funktioniert genauso, denn um die *letzten* 100 Treffer auszugeben, muß ich nun mal alle berechnen.)

    Spannender wird die Sache, wenn Du 20 Millionen Datensätze hast und/oder Tausende von Treffern. Dann könnte man nämlich einen daemon schreiben, der die Query einmal durchführt und ihr Ergebnis speichert (LRU-Algorithmus etc., um "alte" Anfragen herauszuswappen).
    Das CGI-Skript würde dann nur eine Kommunikationsverbindung (socket?) zu diesem daemon aufbauen, statt die Query selbst zu erledigen.
    Auf diese Weise würde man die Datenbankabfrage nur ein einziges Mal durchführen und möglicherweise einiges an Performance gewinnen ... die Idee lohnt sich natürlich vor allem dann, wenn es der Normalfall ist, daß auch wirklich geblättert wird, also die Trefferrate für wiederholten Zugriff auf dieselbe Query gut wird. (Und wenn der daemon genügend Hauptspeicher zur Verfügung hat.)