SQL GROUP mit veralteter Ausgabe

Philosophieren über Code-Schnippel und Selbsthilfegruppe für Hard- und Softwareproblemchen.
Benutzeravatar
Spark
Gigant
Beiträge: 505
Registriert: So 24. Jul 2011, 16:23
Wohnort: Berlin
Kontaktdaten:

SQL GROUP mit veralteter Ausgabe

Beitragvon Spark » So 27. Jan 2013, 18:18

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.
Meine Blogs:
LimeArts Webdesign - Internet &Technologie
Hopeless - Rollenspiele News & Reviews
Diablo 3 News & Community
"Oh Gott. Warum hab ich mir nochmal Betatester gewünscht? Und dann bekomm ich sowas!"

"Ich hab von dir geträumt....so viele fiese Sachen auf einmal sind mir noch nicht untergekommen, du Satan."

Benutzeravatar
Aerius
Gigant
Beiträge: 717
Registriert: So 24. Jul 2011, 16:47
Wohnort: Köln

Beitragvon Aerius » So 27. Jan 2013, 22:07

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?
Tanz! Daemon... komm' schweig mit mir.

Benutzeravatar
Spark
Gigant
Beiträge: 505
Registriert: So 24. Jul 2011, 16:23
Wohnort: Berlin
Kontaktdaten:

Beitragvon Spark » So 27. Jan 2013, 22:38

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.
Meine Blogs:
LimeArts Webdesign - Internet &Technologie
Hopeless - Rollenspiele News & Reviews
Diablo 3 News & Community
"Oh Gott. Warum hab ich mir nochmal Betatester gewünscht? Und dann bekomm ich sowas!"

"Ich hab von dir geträumt....so viele fiese Sachen auf einmal sind mir noch nicht untergekommen, du Satan."

Wegar
Beiträge: 1
Registriert: So 27. Jan 2013, 22:43
Wohnort: Österreich

Beitragvon Wegar » So 27. Jan 2013, 22:47

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.


Zurück zu „Techtalk“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste