• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Letzte 20 Einträge in MySQL auslesen

BDG

Mitglied
Hey Freunde...

Bei meinem Chat werden die Nachrichten beim Auslesen nach Zeit sortiert. Das gibt die ersten 20 Nachrichten nach Zeit sortiert an...
Nun will ich aber die letzten 20 Nachrichten haben, nicht die ersten !
Wenn ich da ein DESC ranhänge dreht sich nur die Zeit um, und der Chat geht nach oben hin sozusagen...
Was soll ich da machen, um die letzten Einträge rauszubekommen ?

Meine Troll-Version, die nichtmal klappt :
PHP:
 Troll - Pastebin.com[/url]
Da wollte ich mit Subselect beim LIMIT sowas machen : Limit (zeilen, zeilen - 20) 
Allerdings naja... Hab dann jeweils via Subselect die Zeilen ausgelesen, aber das hat nich sooo super funktioniert^^
Die Idee war eh doof....
Wie macht man das in echt ? 


(Ich könnte natürlich in einer SQL-Abfrage vorher die Zeilen zählen, und dass dann so machen, wie ich beschrieben hab, aber gehts nicht anders ?)

Mit freundlichen Grüßen,

BDG
 
Werbung:
Code:
#Dann nimmt man die ID

SELECT * FROM chats ORDER BY chat_id DESC LIMIT 20;

Wenn das eine Attribut nicht will, nimm ein anderes, dazu gibts die laufende ID ;-).

Nils aka XraYSoLo
 
Zuletzt bearbeitet:
Werbung:
@XRaySolo : Gleiches Ergebniss^^ Mcht leider kein Unterschied^^
@Asterixus : Was ist das limit-Keyword ? Ich hab gegooglet, aber immer nur ganz normale LIMIT Angaben gefunden, also "LIMIT 0, 10" undso...
 
Genau die sind damit gemeint.

Beispiele:
Wenn man die ersten 20 Einträge von der Ergebnismenge, die nach ID aufsteigend sortiert ist, haben will:
Code:
SELECT * 
FROM Tabelle
ORDER BY ID
LIMIT 0,20

Wenn man die 20. bis 40. Einträge von der Ergebnismenge, die nach ID aufsteigend sortiert ist, haben will:
Code:
SELECT * 
FROM Tabelle
ORDER BY ID
LIMIT 20,40
 
Ja oke, danke^^ Also das wusste ich schon, und habe wie im ersten Post gesagt, nach methoden gesucht, ob man das auch umgehen kann, also anders machen kann^^
Also lese ich vorher die Menge der Zeilen aus, und dann : LIMIT (:rowcount, (:rowcount - 20))
Was macht er denn eigentlich wenn es nur 10 Einträge gibt, und da dann steht : LIMIT 10, -10 ?
 
Werbung:
Nein, Du musst nichts vorher auslesen. Daher auch mein Beispiel (hier komplettiert um die eigentlich optionale Sortierungrichtung):

Code:
SELECT * 
FROM Tabelle
ORDER BY ID ASC
LIMIT 0,20

Wenn Du die letzten 20 haben willst, wenn man nach ID sortiert, dann musst Du nur die Sortierung umdrehen (ORDER BY ID ASC > ORDER BY ID DESC):

Code:
SELECT * 
FROM Tabelle
ORDER BY ID DESC
LIMIT 0,20

Dem LIMIT ist es egal, wieviele Datensätze in einem Statement tatsächlich herauskommen. Wenn Du in einer Tabelle nur 2 Datensätze hast und "LIMIT 0, 10" schreibst, dann ergibt die Abfrage natürlich nur 2 - man muss das Statement nicht daraufhin anpassen.
 
Häää ? Nein ! Das geht so nicht. So wie dus beschrieben hast wird die neuste Nachricht ganz oben angezeigt... Also komplett falsch rum, und dann auchnoch nur die ersten 20... Die anderen Versionen hab ich auch ausprobiert, aber das ist nie richtig^^

ich dachte nur es gibt in PDO schon sone vorgefertigte Variable wie "rowcount" oderso, die man benutzen kann^^
 
Woran machst Du denn "neueste Nachricht" fest? An der ID? Oder eher (was inhaltlich richtiger wäre) an einem Datumfeld? Wie sieht denn dein aktuelles Statement aus und wie ist der Tabellenaufbau dazu?
 
Werbung:
neuste Nachricht hat die neuste Uhrzeit und auch die höchste ID. Und ich habs jetzt genau so gemacht, wie du gesagt hast :
ORDER BY id DESC LIMIT 20
 
Ach, jetzt weiß ich was Du meinst. Dann würde ich folgendes empfehlen:

Code:
SELECT * 
FROM (
 SELECT * 
 FROM tabelle t 
 ORDER BY t.ID DESC 
 LIMIT 20
) g 
ORDER BY g.id ASC
 
Zurück
Oben