Seite 1 von 1

SQL GROUP mit veralteter Ausgabe

Verfasst: So 27. Jan 2013, 18:18
von Spark
Vielleicht hat Jemand eine Idee (nein SQL ist nicht meine Stärke und es ist zum Haare raufen)

[mysql]SELECT accounts.name, mail.msgfrom, mail.msgto, mail.subject, mail.seen, mail.sent, petitionmail.petitionid, mail.messageid
FROM mail
LEFT JOIN petitionmail
USING ( messageid )
LEFT JOIN accounts ON ( accounts.acctid = mail.msgfrom
OR accounts.acctid = mail.msgto )
WHERE (
(mail.msgto = 'xxx' OR mail.msgfrom = 'xxx') OR (mail.msgfrom = '0' AND mail.msgto = 'xxx')
)
GROUP BY accounts.name
ORDER BY mail.seen ASC , mail.sent DESC[/mysql]

Das Ergebnis wird dazu genutzt um Gespräche gruppiert nach Benutzer auszugeben. Statt 18 Einzelbenachrichtungen, wird nur noch ein gruppiertes Ergebnis mit dem Namen der Kontaktperson ausgegeben.

Problem: Der zur Sortierung heran gezogene Timestamp stimmt nicht und wird recht willkürlich ausgewählt. Hier und da kommt es vor, dass das neueste Ergebnis heran geholt und korrekt sortiert wird. Dann friert dieses Ergebnis jedoch wieder ein und ändert sich ewig nicht. Obwohl neuere Nachrichten vorhanden sind, bleibt der ausgegebene Timestamp in der Übersicht unverändert. Und dann springt er plötzlich wieder auf den aktuellen Stand und friert aufs neue ein.

Ist schwierig zu erklären und mir erschließt sich in keiner Weise, wie es zu dieser falschen Ausgabe kommt.

Verfasst: So 27. Jan 2013, 22:07
von Aerius
Das einzige, dass mir spontan auffällt, ist das = "0". Bist du sicher, dass das nicht = NULL sein muss?

Abseits davon: ich habe GROUP BY nie genutzt, w3 sagt aber, GROUP BY darf nur bei aggregate functions genutzt werden. Möglichweise nutzt du das falsch?

Verfasst: So 27. Jan 2013, 22:38
von Spark
Ja das 0 an dieser Stelle ist korrekt gesetzt. Nein ich bin mir absolut nicht sicher dass ich GROUP richtig verwende. Alles was im Netz zu dem Thema "Group zählt falsch" oder "Group höchstes / neuestes Ergebnis" führt zu seitenlangen Diskussionen ohne wirklich auf einen Nenner zu kommen.

Verfasst: So 27. Jan 2013, 22:47
von Wegar
Nein, ein GROUP BY geht nur, wenn man das mit einer Aggregatfunktion nutzt, dann auch möglichst nur So:
Select column_name, aggregate_function(column_name)
from wasimmer
group by column_name

Das hier riecht eher nach einem eindeutigen Subselect.