ORDER BY date und Seiten

Hi :D


Ich habe ein Script welches aus der Tabelle messages Einträge ausliest.

Bis jetzt ist der Befehl:
PHP:
$link->query("SELECT * FROM messages WHERE ID > $from LIMIT $persite");

So das Problem ist, dass die alten einträge unten sind.
Also muss ich ein ORDER BY date DESC hinzufügen.
Aber dann kann ich nicht mehr ID > $from schreiben, da die neueren ja eine höhere ID haben.($from beträgt $persite*Seite, $persite in dem fall 25).
Wie bekomme ich das hin? Gibt es etwas sowas wie einen SKIP befehl, der dann "$from" einträge überspringt? ?(


MfG
 
Code:
<?php $link->query("SELECT * FROM messages WHERE ID > $from ORDER by date desc  LIMIT $persite"); ?>

das müsste doch eigentlich gehen wenn ich mich grad nicht täusche
 
Weshalb genau kannst Du das nicht schreiben? Order By wird afaik erst zum Schluss auf das Ergebnis angewendet. Sollte also eigntlich nicht das Problem sein:
Für Wen Geht Susi Heute Ohne Slip?

FROM, WHERE, GROUP BY, SELECT (1), HAVING, ORDER BY, SELECT (2)
:)
http://www.ict4us.com/r.kuijt/de_sql.htm
 
also zumindest bei meinem mysql-testserver kann das limit auch nach dem order by stehen, also die variante die ich gepostet habe läuft bei mir. setze ich dagegen das order by ganz ans ende (so wie ich das bei cdw verstanden habe) bekomme ich eine fehlermeldung
 
@lightsaver: weil LIMIT nicht zum SQL-Standard gehört ? ;)
Ich meinte allerdings, warum die erste Variante (um order by ergänzt) nicht funktionieren sollte.
 
Ja das ist schon richtig aber das problem ist, das die neueren einträge eine Höhere id haben.

Quasi:


Vor 2 monaten: ID 0-50
Heute: ID 500-550

so und wenn ich das jetzt mit seiten mache und WHERE ID > SEITE*25 dann zeigt der mir auf den letzten seiten die aktuellsten einträge an.
Ich will die aktuellen jedoch auf den ersten seiten und nicht auf den letzten.


Quasi würde ja gehen SELECT * FROM messages ORDER by date desc LIMIT 25

Aber wie bekomme ich dann die seiten hin?
 
Ach so, dann könntest Du ja mal
SELECT * FROM messages ORDER by date desc LIMIT seite*25,seite*25+25
(also als Auswahl - von, bis ) probieren. Wobei man die Seitenzählung dann bei 0 anfangen sollte.
 
also so wirklich verstehen was du willst tu ich nicht.

wenn die ids an sich auch schon die zeitliche abfolge wiederspiegeln, dann reicht doch das was du gemacht hast, wobei du date und id auch austauschen könntest.
damit werden dann sozusagen erstmal alle einträge absteigend gewählt, also neueste zuerst, und dann nur 25 an dich zurückgegeben.

oder willst du alle einträge haben, aber diese dann auf seiten verteilen, also seite 1 sind einträge 1-25, seite 2 26-50... wobei 1 der jüngste eintrag ist?

dann würde das immernoch so gehen wie du mitlerweile schon geschrieben hast, nur dass du dann noch ein offset beim limit mit übergeben musst. dadurch sagst du, dass du 25 haben willst, aber erst bei eintrag 151 starten willst (als beispiel).
 
Original von CDW
SELECT * FROM messages ORDER by date desc LIMIT seite*25,seite*25+25

das wäre eine schlechte idee (zumindest bei mysql, bei anderen bin ich mir nicht sicher), da limit als parameter nicht von,bis hat, sondern offset und anzahl zeilen, also wenn dann limit seite*25, 25 ;)
 
oder willst du alle einträge haben, aber diese dann auf seiten verteilen, also seite 1 sind einträge 1-25, seite 2 26-50... wobei 1 der jüngste eintrag ist?

dann würde das immernoch so gehen wie du mitlerweile schon geschrieben hast, nur dass du dann noch ein offset beim limit mit übergeben musst. dadurch sagst du, dass du 25 haben willst, aber erst bei eintrag 151 starten willst (als beispiel).


Genau!

Der erst angezeigte Eintrag soll der jüngste sein.

Aber wie mach ich das als SQL-Befehl? weil je höher die ID desso neuer(die ID wird autom. erhöht)
 
also langsam komm ich mir von dir ziemlich verarscht vor!

du hast von cdw die lösung gesagt bekommen (mit kleiner korrektur von mir) und solltest diese vielleicht einfach mal umsetzen.
 
AlterHacker:

Vergiss die ID und das damit verbundene WHERE-Gewurschtel bei dir. Das ist nur Ersatz dafür, LIMIT mit 2 Parametern zu verwenden wie's CDW vorgeschlagen hat. Ich schätze, hier liegt dein Denkfehler.

Sortiere deine Einträge nach Datum (wenn du kein entsprechendes Feld in der Tabelle hast eben nach der ID) und gib dann mit LIMIT an, welche Seite der Ergebnisse du haben willst. Nochmal zum Mitschreiben und mit den von dir bereits definierten Variablen im Eingangsbeitrag:

Code:
SELECT *
FROM messages
ORDER BY id
LIMIT $from, $persite
 
Achso, ich hab das falsch verstanden.

Ich dachte das es LIMIT $from, $persite nicht geht.

Wenn doch dann isses genau das was ich wünsche :D

sry

EDIT: Yeah es funzt :D :D :D Vielen Dank!
 
Zurück
Oben