Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

ORDER BY date und Seiten

Diskussion: ORDER BY date und Seiten im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Hi :D Ich habe ein Script welches aus der Tabelle messages Einträge ausliest. Bis jetzt ist der Befehl: PHP-Code: ...

Antwort
Alt 24.04.08, 15:26   #1 (permalink)
 
Benutzerbild von ChiefWiggum
 
Registriert seit: 09.10.07
ChiefWiggum Leistung: 8086
ChiefWiggum eine Nachricht über ICQ schicken
Likes: 11
ORDER BY date und Seiten

Anzeige

Hi :D


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

Bis jetzt ist der Befehl:

PHP-Code:
$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
__________________
Be the source always with you.
ChiefWiggum ist offline   Mit Zitat antworten
Alt 24.04.08, 15:30   #2 (permalink)
Moderator
 
Benutzerbild von lightsaver
 
Registriert seit: 19.06.06
lightsaver Leistung: Pentium Ilightsaver Leistung: Pentium Ilightsaver Leistung: Pentium I
Likes: 52
Standard

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
lightsaver ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 24.04.08, 17:50   #3 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

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
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 24.04.08, 18:24   #4 (permalink)
Moderator
 
Benutzerbild von lightsaver
 
Registriert seit: 19.06.06
lightsaver Leistung: Pentium Ilightsaver Leistung: Pentium Ilightsaver Leistung: Pentium I
Likes: 52
Standard

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 ist offline   Mit Zitat antworten
Alt 24.04.08, 18:42   #5 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

@lightsaver: weil LIMIT nicht zum SQL-Standard gehört ?
Ich meinte allerdings, warum die erste Variante (um order by ergänzt) nicht funktionieren sollte.
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 24.04.08, 19:43   #6 (permalink)
Themenstarter
 
Benutzerbild von ChiefWiggum
 
Registriert seit: 09.10.07
ChiefWiggum Leistung: 8086
ChiefWiggum eine Nachricht über ICQ schicken
Likes: 11
Standard

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?
__________________
Be the source always with you.
ChiefWiggum ist offline   Mit Zitat antworten
Alt 24.04.08, 19:55   #7 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

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.
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 24.04.08, 19:59   #8 (permalink)
Moderator
 
Benutzerbild von lightsaver
 
Registriert seit: 19.06.06
lightsaver Leistung: Pentium Ilightsaver Leistung: Pentium Ilightsaver Leistung: Pentium I
Likes: 52
Standard

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).
lightsaver ist offline   Mit Zitat antworten
Alt 24.04.08, 20:03   #9 (permalink)
Moderator
 
Benutzerbild von lightsaver
 
Registriert seit: 19.06.06
lightsaver Leistung: Pentium Ilightsaver Leistung: Pentium Ilightsaver Leistung: Pentium I
Likes: 52
Standard

Zitat:
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
lightsaver ist offline   Mit Zitat antworten
Alt 24.04.08, 22:40   #10 (permalink)
Themenstarter
 
Benutzerbild von ChiefWiggum
 
Registriert seit: 09.10.07
ChiefWiggum Leistung: 8086
ChiefWiggum eine Nachricht über ICQ schicken
Likes: 11
Standard

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)
__________________
Be the source always with you.
ChiefWiggum ist offline   Mit Zitat antworten
Alt 24.04.08, 23:25   #11 (permalink)
Moderator
 
Benutzerbild von lightsaver
 
Registriert seit: 19.06.06
lightsaver Leistung: Pentium Ilightsaver Leistung: Pentium Ilightsaver Leistung: Pentium I
Likes: 52
Standard

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.
lightsaver ist offline   Mit Zitat antworten
Alt 25.04.08, 00:13   #12 (permalink)
LX
Moderator
 
Registriert seit: 14.02.06
LX Leistung: Z3
LX eine Nachricht über ICQ schicken LX eine Nachricht über AIM schicken LX eine Nachricht über Yahoo! schicken
Likes: 21
Standard

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
__________________
"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

JS BB LX UP
LX ist offline   Mit Zitat antworten
Alt 25.04.08, 07:01   #13 (permalink)
Themenstarter
 
Benutzerbild von ChiefWiggum
 
Registriert seit: 09.10.07
ChiefWiggum Leistung: 8086
ChiefWiggum eine Nachricht über ICQ schicken
Likes: 11
Standard

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

sry

EDIT: Yeah es funzt Vielen Dank!
__________________
Be the source always with you.
ChiefWiggum ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » ORDER BY date und Seiten
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
HITCH - Der Date Doctor TIMBA Music- & Filmbox 1 19.08.07 13:14
ORDER BY Zahlenwert... TeeKayo2 (Web-) Design und webbasierte Sprachen 4 26.07.06 18:05
web to date Itchy (Web-) Design und webbasierte Sprachen 0 10.11.03 11:12


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61