verzwicktes SQL-Statement
mika
- datenbank
0 the-FoX0 Vinzenz Mai0 Rouven
Hallo Zusammen,
ich habe mir mit Mühe und ein komplexes SQL-Statement aufgebaut, das aus einem Subselect und mehrere Left-Joins besteht.
also Ergebnis erhalte ich eine Tabelle in ähnlicher Form wie diese:
id spalte1 spalte2 cdate
1 Text Text 2009-01-19 17:00:00
1 Text Text 2009-01-19 16:50:00
2 Text Text 2009-01-18 15:00:00
Nun möchte ich noch folgende Bedingung in das SQL-Statement einbringe:
wenn mehrere datensätze die selbe id haben, soll nur der datensatz mit dem ältesten cdate in der ergebnismenge enthalten sein.
Aus obiger Beispieltabelle soll dann folgendes resultieren:
id spalte1 spalte2 cdate
1 Text Text 2009-01-19 16:50:00
2 Text Text 2009-01-18 15:00:00
Ich suche schon stundenlang nach einer Lösung aber ich komme einfach nicht darauf wie ich dies machen könnte. Eine Alternative wäre, die Ergebnismenge nachträglich mittels PHP zu filtern.
Aber es gibt doch sicher eine Möglichkeit dies gleich im SQL-Statement zu erledigen, oder?
Moin Mika,
spontan würde mir einfallen ein ORDER BY CDATE ASC GROUP BY id
einzuführen.
Gruß,
the-Fox
Hi Fox,
spontan würde mir einfallen ein ORDER BY CDATE ASC GROUP BY id
einzuführen.
Danke es funktioniert auf den ersten Blick wunderbar. Werde es noch mit weiteren Testdaten testen.
Wenn man die Lösung vor Augen hat, sieht es so logisch und einfach aus :-)
yo,
Danke es funktioniert auf den ersten Blick wunderbar. Werde es noch mit weiteren Testdaten testen.
Wenn man die Lösung vor Augen hat, sieht es so logisch und einfach aus :-)
ich bin mir recht sicher, das es nicht funktioniert. und was du vor augen hast ist wohl eher der heimtükische mysql bug, "ich lieb dich nicht, du liebst mich nicht". aber das kann man dir genau sagen, wenn du uns mal die abfrage zeigst.
Ilja
Hallo,
also Ergebnis erhalte ich eine Tabelle in ähnlicher Form wie diese:
id spalte1 spalte2 cdate
1 Text Text 2009-01-19 17:00:00
1 Text Text 2009-01-19 16:50:00
2 Text Text 2009-01-18 15:00:00
Nun möchte ich noch folgende Bedingung in das SQL-Statement einbringe:
wenn mehrere datensätze die selbe id haben, soll nur der datensatz mit dem ältesten cdate in der ergebnismenge enthalten sein.
Aus obiger Beispieltabelle soll dann folgendes resultieren:
id spalte1 spalte2 cdate
1 Text Text 2009-01-19 16:50:00
2 Text Text 2009-01-18 15:00:00
Aber es gibt doch sicher eine Möglichkeit dies gleich im SQL-Statement zu erledigen, oder?
ja. Wie Ilja bereits durchscheinen ließ (zumindest für Insider), suchst Du die korrelierte Unterabfrage, siehe zum Beispiel diesen Archivbeitrag von mir.
Freundliche Grüße
Vinzenz,
der sich wirklich einmal die Zeit nehmen sollte, einen Artikel zu diesem Thema zu schreiben.
Hello,
der sich wirklich einmal die Zeit nehmen sollte, einen Artikel zu diesem Thema zu schreiben.
ja, weil ich dann auch endlich anfangen könnte den Leuten was zu verlinken :-)
Und vergess nicht den Abschnitt über MySQLs-Sonderlocke bei GROUP BY :-P
MfG
Rouven