Kalle_B: MySQL: Die Zeile mit dem kleinsten Wert

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

  1. 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,8

    Das 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

    1. 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