mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Do 28.03.2024 09:35 Benutzername: Passwort: Auto-Login

Thema: [MySQL] Rows vor Group By ordnen :-S vom 22.11.2010


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> [MySQL] Rows vor Group By ordnen :-S
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

Antworten mit Zitat Zum Seitenanfang

Hallo zusammen,
uh-uh, mysql-Threads sind ja immer schwierig. Ich versuch's trotzdem mal Lächel
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 *Huch*

Für Hilfe oder Denkanstöße wäre ich sehr dankbar Grins
  View user's profile Private Nachricht senden
bacon

Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
Verfasst Mo 22.11.2010 13:28
Titel

Antworten mit Zitat Zum Seitenanfang

Stichwort Aggregatfunktion (min() oder max()). count() ist auch eine *zwinker*
  View user's profile Private Nachricht senden
Anzeige
Anzeige
fyll

Dabei seit: 20.09.2003
Ort: Augsburg
Alter: 39
Geschlecht: Männlich
Verfasst Mo 22.11.2010 14:36
Titel

Antworten mit Zitat Zum Seitenanfang

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.
  View user's profile Private Nachricht senden
trashmaster
Threadersteller

Dabei seit: 20.01.2010
Ort: -
Alter: -
Geschlecht: -
Verfasst Mo 22.11.2010 15:34
Titel

Antworten mit Zitat Zum Seitenanfang

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 *zwinker*

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
  View user's profile Private Nachricht senden
 
Ähnliche Themen [MySQL] Probleme mit GROUP BY
MySQL / case & group by & order
[PHP] alphabetisch ordnen
Wie Job sinnvoll ordnen?
schriften ordnen?
SQL-Ergebnis ordnen nach Wunch
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.