17.10. Ich habe eine Tabelle mit n Einträgen und möchte auf jeder Seite m davon anzeigenAntwort von Kristian KöhntoppIn MySQL kann man zu diesem Zweck die LIMIT-Direktive verwenden, die m Einträge ab Position s einer geordneten Tabelle anzeigt. In anderen Datenbanken muss man sich eine Zeilennummer definieren und kann dann einen Teil der Tabelle mittels einer BETWEEN-Clause auswählen. # MySQL mysql> SELECT * FROM tabelle LIMIT s,m; Es ist nicht effizient, alle n Datensätze der Tabelle zu selektieren und dann alle Datensätze vor Position s zu überlesen. Antwort von Daniel T. GorskiMit Hilfe eines solchen SQL-Statements kann man sich dann leicht eine Funktion schreiben, die den entsprechenden Ausschnitt der Tabelle anzeigt und Links zum vorhergehenden und folgenden Tabellenausschnitt enthält. Im Folgenden möchten wir hier diese einfache "Blättern"-Funktion realisieren, die uns erlaubt, über die Ergebnisse einer Datenbank-Query vor- und zurück zu browsen. Es wird davon ausgegangen, dass eine einfache MySQL-Datenbank (deren Name über die Variable $database definiert wird) vorhanden ist. Diese enthält die von uns benötigte Tabelle (Variable $table), über die wir "blättern" wollen. CREATE DATABASE nameDerDatenbank; USE nameDerDatenbank; CREATE TABLE nameDerTabelle (ID int(10) unsigned NOT NULL, INHALT text NOT NULL); Diese Datenbankstruktur kann z.B. mit phpMyAdmin, einem anderem PHP-Script oder direkt mit dem MySQL-Monitor erstellt werden. Um Ausgabeergebnisse zu erhalten, muss die Tabelle selbstverständlich zuerst mit Inhalt gefüllt werden - an dieser Stelle gehen wir davon aus, dass die Tabelle mehrere Einträge enthält. <?php // Daniel T. Gorski dtg/240900/18:49/01 // Achtung: die Definition der $user- und $passwort-Variablen // _sollte_ in einer externen Datei außerhalb des Document-Root // festgelegt werden. Diese Datei muss dann an dieser Stelle // [mit include() oder require()] importiert werden. // Mehr dazu in dieser dclp-FAQ unter: "Wie kann ich mein // Datenbankpasswort gegen Spionage sichern?" // Datendefinition für Datenbankverbindung. $host = "localhost"; // MySQL - Zielrechner. // Normallerweise ist es "localhost", bzw. // synonym "127.0.0.1", also der Rechner, // auf dem auch _dieses_ Script läuft. $user = "deinLogin"; // Dein Userlogin. $password = "deinPasswort"; // Dein Datenbankpasswort. $database = "nameDerDatenbank"; // Gewünschte Datenbank // innerhalb von MySQL $table = "nameDerTabelle"; // Der Name der Datenbanktabelle // Datendefinition für die Clientausgabe $start = (isset($start)) ? abs((int)$start) : 0; $limit = 10; // Datensätze pro Ausgabeseite // Verbindung zu MySQL-Datenbank herstellen oder sterben. @mysql_connect($host,$user,$password) or die("Abbruch: Verbindung zu '$host'" ." konnte nicht hergestellt werden."); // Benötigte Datenbank auswählen oder sterben. @mysql_select_db($database) or die("Abbruch: Datenbank '$database' konnte nicht" ." selektiert werden.<br><br>MySQL sagt: ".mysql_error()); // Feststellen der Anzahl der verfügbaren Datensätze. $resultID = @mysql_query("SELECT COUNT(ID) FROM ".$table); $total = @mysql_result($resultID,0); // Ggf. $start korrigieren (falls Parameter in // der URL manipuliert wurde) $start = ($start >= $total) ? $total - $limit : $start; // Datenbankabfrage ausführen. $query = "SELECT ID,INHALT FROM ".$table ." LIMIT ".$start.",".$limit; $resultID = @mysql_query($query); // Ergebnisse lesen und an den Client ausgeben while ($data = mysql_fetch_array($resultID)) { echo $data["ID"].": ".$data["INHALT"]."<br>"; } // Zurück- und Vorblättern if ($start > 0) { $newStart = ($start - $limit < 0) ? 0 : ($start-$limit); echo "<a href=".$_SERVER['PHP_SELF']."?start=".$newStart ."><< zurück</a>"; } if ($start + $limit < $total) { $newStart = $start + $limit; echo " <a href=".$_SERVER['PHP_SELF']."?start=".$newStart .">vor >></a>"; } // Die benutzte (nichtpersistente) Verbindung zu der MySQL-Datenbank, // wird nach dem Script-Ende automatisch geschlossen. // That's it. ?> Antwort von Frank WiegandArbeitet man mit dem DB-Abstraktionslayer aus dem PEAR, kann man komfortabel die Pakete DB_Pager und Pager_Sliding einsetzen. |
||
17.10. Ich habe eine Tabelle mit n Einträgen und möchte auf jeder Seite m davon anzeigen http://www.php-faq.de/q/q-mysql-seitenweise.html |
||
Archiv der de.comp.lang.php-FAQ Dies ist eine Archivseite von 2008 und wurde seitdem nicht geändert. Das dclp-FAQ-Team |