SQL: ORDER BY vor GROUP BY
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
alternativ
anweisung
anwort
beitrag
datensatz
fehler
folgen
hirn
letzte
limit
lsen
lsung
order
panther
post
prinzip
sinnen
tabelle
vielen dank
wolltest
-
Hallo,
ich stehe vor einem SQL-Problem. Ich möchte aus einer Tabelle, die die Beiträge im Forum speichert die letzten Beiträge herausfiltern. Dazu brauche ich nur die Tabelle 'posts' die folgende Zellen (sowie drei Beispieldatensätze) enthält:
thread_id | post_id | time
================================
1 ............ | 1 ......... | 0610271200
2 ............ | 1 ......... | 0610271315
1 ............ | 2 ......... | 0610281600
Meine SQL-Anweisung sieht bisher folgendermaßen aus:
SELECT *
FROM posts
ORDER BY time DESC
LIMIT 7
Die Anweisung liefert mir die 7 letzten Beiträge. wie man in der Tabelle sieht, sind allerdings Datensatz 1 und 3 im selben Thema. Daher macht es ja keinen Sinn den doppelt auszugeben. Ausdem Grund habe ich in meine SQL-Anwesung 'GROUP BY thread_id' eingefügt. Dieses hat allerdings zur folge das Datensatz 1 angezeigt wird und nicht der neure Datensatz 3. Im Prinzip müsste ich zuerst die 'ORDER BY time DESC' auisführen und danach die Rückgabe gruppieren. Doch setzte ich ORDER BY vor GROUP BY crasht die Anwesiung mit nem Fehler. Wie kann ich es alternativ lösen?
Vielen Dank schonmal.
MfG
Panther
Beitrag geändert: 28.10.2006 18:06:53 von blackpanther-online
-----------------
Hallo, ich habe die Lösung selber herausgefunden:
SELECT `thread_id` , MAX( `post_id` )
FROM `posts`
GROUP BY `thread_id`
ORDER BY `time`
LIMIT 7
Beitrag geändert: 29.10.2006 8:54:02 von blackpanther-online -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
hmm dein problem hat mich 20min hirn gekostet :D
Habe aber doch eine passable lösung gefundne:
SELECT * FROM mytable WHERE zeit IN (SELECT max(zeit) FROM mytable AS X WHERE X.thread_id=mytable.thread_id)
Diese Abfrage liefert dir für jeden Thread den letzten beitrag. Ich glaube das du das wolltest
SELECT * FROM mytable WHERE zeit IN (SELECT max(zeit) FROM mytable AS X WHERE X.thread_id=mytable.thread_id) ORDER BY zeit DESC LIMIT 7
zeigt jetzt nurmehr die 7 thread wo die letzten anworten unter den neuersten sind.
sie selbst
bei probs schick mir PN
mfg
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage