PHP&MySQL: nur 10 Treffer pro Seiten anzeigen oder genau N-ter Datensatz auslesen

16 Nov 2008 um 22:28 - MySQL/Datenbank

Häufig muss man folgendes Problem lösen: wir haben die Seite, in der alle Artikel angezeigt werden müssen. Da es Hunderte von Artikel gibt, brauchen wir eine Unterteilung z.B. nach Datum erste 10, 20 usw.

Zuerst kommt die schreklichste Lösung:
1. alle Daten aus Datenbank holen
2. die gewünschten Daten aus 1. mit PHP aussortieren

SQL-Abfrage: SELECT * FROM TNEWS - alle Datensätze auslesen

Dieses Verfahren ist nicht optimal, weil wir zu vielen Datensätzen auslesen, die wir tatsächlich nicht brauchen.

Dafür gibt es die folgende Abfrage:

SQL-Abfrage: SELECT * FROM TNEWS LIMIT 5 - nur 5 Datensätze

Hier wird nur 5 Datensätze ausgelesen - je weniger Daten mit SQL-Abfrage kommt, desto "leichter" für Server :) Außerdem arbeitet die Abfrage mit LIMIT-Statement viel schneller als ohne LIMIT: sie findet genau diese 5 Datensätze und dann bricht weitere Suche ab.
Nehmen wir an, brauchen wir weitere 10 Datensätze zum Beispiel von 6. bis 15. - auch kein Problem mit SQL:

SQL-Abfrage: SELECT * FROM TNEWS LIMIT 5,10 - auslesen 10 Datensätze ab dem 5. Datensatz (ausschließlich!) - 6..15

So kann man Datensätze aus der Mitte holen und so wird die Unterteilung (1..10,11..20 usw.) organisiert.
In URL-Adresse wird die Nummer der Seite geschickt (z.B. index.php?seite=6 - die 6. Seite mit allen Artikel mit den Nummern von 51 bis 60, je 10 Artikel pro Seite).

$anzahl_artikel=10; //automatisch vordefiniert, Variable $seite kommt aus $_GET/$_POST-Array
$query="SELECT * FROM TNEWS LIMIT ".$anzahl_artikel*($seite-1).", $anzahl_artikel";

Noch eine interessante praktische Anwendung: n-ter Datensatz aus Datenbank auslesen.

Beispiel, das der 23. Datensatz bringt:

SQL-Abfrage: SELECT * FROM TNEWS LIMIT 22,1 - 22+1 ist 23 ;)
Kommentare (1)

karina hat geschrieben am 9 Jul 2009 um 14:43
+3

Das ist echt super erklärt! Und so einfach - für Anfänger wie mich perfekt.

Dankeschön und schöne Grüße!
Karina


© 2008 Anton Pavlushko - Webentwicklung, Internetmarketing und Suchmaschinenoptimierung (SEO)

0.073652029037476 sec