MySQL: Die Zeile mit dem kleinsten Wert
Kalle_B
- datenbank
Hallöle,
komme mit einem Problem nicht weiter. Aus einer Veranstaltungstabelle möchte ich die nächsten 8 Termine von verschiedenen Orten. Also ein Ort soll nicht mehrfach vorkommen, nur sein erster Termin.
SELECT
min(concat(ter1.tag, ter1.uhr)) tag_uhr
,ter1.*
,DATE_FORMAT(ter1.tag,'%w') wotag
,ort1.plz ort_plz
,ort1.name ort_name
,ort1.name_zusatz ort_name_zusatz
FROM bia_termine AS ter1
LEFT JOIN (bia_orte AS ort1)
ON (ort1.id = ter1.ort_id)
WHERE ter1.owner_id = 1
AND ter1.intern_kz = 0
#AND ter1.bild_url > ''
GROUP BY ter1.ort_id
ORDER BY tag_uhr
LIMIT 0,8
Das Ergebnis liefert mir zwar die kleinsten tag_uhr und jeden Ort nur einmal, aber die Zeile dazu (ter1.*) stimmt nur zufällig.
Stehe heute etwas auf dem Schlauch, habe auch schon einen Versuch mit Sub- SElect gemacht, ohne Erfolg.
Wo ist mein Denkfehler?
MfG Kalle
Hallo Kalle,
SELECT
min(concat(ter1.tag, ter1.uhr)) tag_uhr
,ter1.*
,DATE_FORMAT(ter1.tag,'%w') wotag
,ort1.plz ort_plz
,ort1.name ort_name
,ort1.name_zusatz ort_name_zusatz
FROM bia_termine AS ter1
LEFT JOIN (bia_orte AS ort1)
ON (ort1.id = ter1.ort_id)
WHERE ter1.owner_id = 1
AND ter1.intern_kz = 0
#AND ter1.bild_url > ''
GROUP BY ter1.ort_id
typischer Anfängerfehler (ich weiß, dass Du eigentlich keiner bist),
der nur unter MySQL nicht zu einer Fehlermeldung führt.
Es ist nach jeder Spalte, für die keine Aggregatsfunktion verwendet wird,
zu gruppieren, weil ...
ORDER BY tag_uhr
LIMIT 0,8Das Ergebnis liefert mir zwar die kleinsten tag_uhr und jeden Ort nur einmal, aber die Zeile dazu (ter1.*) stimmt nur zufällig.
alle Werte in den anderen Spalten unvorhersagbar sind (wenn die Werte nicht gleich sind) - so steht es auch im Handbuch.
Die Lösung heißt korrelierte Unterabfrage, siehe z.B. dieses Archivposting von mir.
Freundliche Grüße
Vinzenz
Hallo Vinzenz,
Die Lösung heißt korrelierte Unterabfrage, siehe z.B. dieses Archivposting von mir.
Das hat mir geholfen.
Mir war nicht bewusst, dass man Tabellen in der Klammer mit denen ausserhalb der Klammer verknüpfen kann. Jetzt läuft's.
Danke.
MfG Kalle