Select ... die letzten 10 Einträge
Thorsten Beuth
- datenbank
Hallo liebe PHP/MySQL Gemeinde und den Rest!
Ich habe ein Problem und werde deshalb mal eine Datenbank erstmal posten um es zu erklären:
+---+------+
|id |werte |
+---+------+
| 1 | |
| 4 | |
| 5 | |
| 6 | |
| 7 | |
| 8 | |
|10 | |
|11 | |
|12 | |
|13 | |
|14 | |
|15 | |
+---+------+
id besitzt auto_increment();
Das ganze soll für ein Gästebuch funktionieren. Der Nutzer postet, dadurch erhöht sich die id automatisch. Leider gibt es hin und wieder schwarze Schafe, die ich aus dem Gästebuch lösche wodurch Lücken entstehen, wie zum Beispiel zwischen 1 und 4 oder 8 und 10. Für das Gästebuch würde ich nun gerne, wegen der Übersicht halber, die Einträge auf mehreren Seiten anzeigen lassen, je Seite 10. Leider kann ich durch die Lücken nie genau 10 auf eine Seite bringen, wenn ich mich an der id orientiere. Als fehlerhaftes Beispiel gebe ich hier mal das an:
SELECT * FROM gästebuch
WHERE id > ( (SELECT MAX( id ) FROM gästebuch ) -10)
Dadurch würden ja nur 9 Einträge gezeigt werden, weil id 9 fehlt.
Gibt es also eine Möglichkeit NUR vorhande Einträge rauszupicken, z. Bsp. die letzten 10, oder aber die letzten 20 ohne die letzten 10, damit ich diese auf kompakten gleichgroßen Seiten zusammenfassen kann.
Mit dankbaren Grüßen
Thorsten
Moin,
SELECT * FROM
gästebuch
WHERE id > ( (SELECT MAX( id ) FROM gästebuch ) -10)
Ist SELECT * nötig?
Gibt es also eine Möglichkeit NUR vorhande Einträge rauszupicken, z. Bsp. die letzten 10,
SELECT feld1, feld2 FROM gaestebuch ORDER BY id DESC LIMIT 0,10;
Mehr dazu findest du in diesem Artikel http://php-faq.de/q/q-mysql-seitenweise.html
Gruß
SteBu
Danke! Sehr hilfreich.
MfG
Thorsten
Moin,
SELECT feld1, feld2 FROM gaestebuch ORDER BY id DESC LIMIT 0,10;
= die ersten 10
LIMIT 10;
= die letzten 10
gruß Maik
= die ersten 10
LIMIT 10;
= die letzten 10
ORDER BY muss dann natürlich weggelassen werden !!
gruß Maik
yo,
ORDER BY muss dann natürlich weggelassen werden !!
meiner meinungnach sollte das ORDER BY immer in Verbindung mit LIMIT eingesetzt werden. ansonsten würde die zuordnung fehlen und die datensätze aus einer ungeordneten menge zufällig gewählt werden.
Ilja
yo,
Leider kann ich durch die Lücken nie genau 10 auf eine Seite bringen, wenn ich mich an der id orientiere.
die ID für sowas zu benutzen ist nicht ratsam. wie schon mehrfach erwähnt wurde hat diese spalte nur einen zweck, den datensatz eindeutig zu identifizieren. um nun eine sortierung reinzubringen, die keine "lücken" aufweißt kannst du zum beispiel eine date/time spaltre mit rein nehmen. und dann sortierst du nach dieser spalte und benutzt wie auch schon bereits erwähnt wurde die LIMIT klausel.
ORDER BY date_spalte LIMIT 0, 10
Ilja