Rolf B: mySQL: Mit einem Sub-Select mehrere Werte bekommen

Beitrag lesen

Hallo Linuchs,

ich komm zum Verrecken nicht mehr drauf wie es geht - aber es gab ein neueres SQL Sprachfeature, mit dem man Wertegruppen bilden konnte und solche Wertegruppen auch aus einem Subselect zurückgeben.

Ich weiß auch nicht, ob das - wenn überhaupt - in MYSQL unterstützt wird. Welche Version verwendest Du da?

Die einfachste - nicht unbedingt performanteste - Lösung könnte eine Mischung aus Subselect und Join sein. Haben deine Medien auch eine ID? Oder zumindest eine Spalte, die zusammen mit der adress_id eine eindeutige Identifikation erlaubt? Du könntest dann im Subselect die Spalte herausholen, die das Medium eindeutig identifiziert, und mit einem Join die andere Spalte hinzuholen.

SELECT x.foo, x.bar, x.audio_titel, y.med1_url as audio_url
FROM (SELECT
        adr1.id as adr_id
        adr1.foo
      , adr1.bar
      , (SELECT med1.titel 
         FROM ".$db[0]['medien']." med1
         WHERE     med1.adress_id  = adr1.id
         AND ... ORDER BY RAND() LIMIT 0,1) audio_titel
     ) x
LEFT JOIN ".$db[0]['medien']." y ON x.adr_id = y.adress_id and x.audio_titel = y.audio_titel

Nein, das ist nicht schön. Aber was besseres fällt mir - angesichts des ORDBER BY RAND() LIMIT 0,1 im Subselect, auch nicht ein.

Ob man mit den Window-Funktionen in MySQL 8 etwas reißen kann (dieses ganze OVER Zeugs), das weiß ich auch nicht. So vertraut bin ich damit nicht, und auf Anhieb fiel mir beim Handbuchüberfliegen nichts auf.

Rolf

--
sumpsi - posui - obstruxi