Autor |
Nachricht |
trashmaster
Threadersteller
Dabei seit: 20.01.2010
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Mo 22.11.2010 13:26
Titel [MySQL] Rows vor Group By ordnen :-S |
 |
|
Hallo zusammen,
uh-uh, mysql-Threads sind ja immer schwierig. Ich versuch's trotzdem mal
Ich bin grad an einem (zumindest für mich) kniffligen Query dran.
Ich habe eine Art Mini-Forum wo man "Events" erstellen und diese kommentieren kann.
Zu jedem Event wird gespeichert, wann welcher User das Event das letzte Mal angeschaut hat.
In Kombination mit dem Timestamp der Kommentare sollte man ja ermitteln können, wieviele neue Kommentare es seit dem letzten Besuch gibt.
Data Sheme:

Mein bisheriger Query: Code: |
SELECT COUNT(cmt.id) AS amount, cmt.event_id, cmt.date
FROM event_comments AS cmt, event_viewed AS vw
WHERE cmt.event_id = vw.event_id AND vw.user_id = 6 AND cmt.date > vw.date
GROUP BY event_id
ORDER BY date DESC |
Funktioniert super, solange pro Event nur ein neuer Kommentar dabei ist:
Code: | 1 neue bei 239 (vor 34 Minuten)
1 neue bei 168 (vor 53 Minuten) |
Sobald es aber mehr als ein Kommentar ist, kommt es zu folgendem Problem:
Code: | 2 neue bei 239 (vor 1 Stunde)
2 neue bei 168 (vor 2 Stunden) |
Wie man sieht ist die Zeitangabe eine ganz andere. Und zwar beziehen sich diese Zeitangaben nun auf den bereits älteren Kommentar, und nicht auf den neusten!
Theoretisch müsste ich die Comments seperat sortieren bevor ich GROUP BY event_id mache, aber ich weiß nicht wie das gehen könnte / ob es überhaupt geht
Für Hilfe oder Denkanstöße wäre ich sehr dankbar
|
|
|
|
 |
bacon
Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Mo 22.11.2010 13:28
Titel
|
 |
|
Stichwort Aggregatfunktion (min() oder max()). count() ist auch eine
|
|
|
|
 |
Anzeige
|
|
 |
fyll
Dabei seit: 20.09.2003
Ort: Augsburg
Alter: 40
Geschlecht:
|
Verfasst Mo 22.11.2010 14:36
Titel
|
 |
|
Probier doch mal nen rightJoin, wenn du willst, dass "viewed" deine linke Tabelle ist.
Außerdem ist ja auch "ORDER BY date DESC" ziemlich missverständlich, wenns 2 mal date gibt.
|
|
|
|
 |
trashmaster
Threadersteller
Dabei seit: 20.01.2010
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Mo 22.11.2010 15:34
Titel
|
 |
|
Hey ich danke euch, mit MAX() hat es lustigerweise recht einfach funktioniert. Das mit dem zweideutigen date habe ich auch noch geändert..
LEFT/RIGHT JOIN hatte ich auch mal probiert, da veränderte sich aber irgendwie garnichts an den Ergebnissen. Left/Right Joins hab ich auch noch nicht richtig geblickt, aber das ist eine andere Geschichte
Code: | SELECT COUNT(cmt.id) AS amount, cmt.event_id, MAX(cmt.date) AS cmt_date
FROM event_comments cmt, event_viewed vw
WHERE cmt.event_id = vw.event_id AND vw.user_id = 5 AND cmt.date > vw.date
GROUP BY event_id
ORDER BY cmt_date DESC
|
|
|
|
|
 |
|
|
 |
Ähnliche Themen |
[MySQL] Probleme mit GROUP BY
MySQL / case & group by & order
Wie Job sinnvoll ordnen?
schriften ordnen?
[PHP] alphabetisch ordnen
SQL-Ergebnis ordnen nach Wunch
|
 |