Mehrfachreferenzen in varchar-Feld



  • Ich habe folgende Tabelle:

    +----+------+------+
    | id | name | refs |
    +----+------+------+
    |  1 | 01   | 3,4  |
    |  2 | 02   |   -  |
    |  3 | 03   |   -  |
    |  4 | 04   |   -  |
    +----+------+------+
    

    Jetzt suche ich nach einer Möglichkeit alle Datensätze, welche in refs stehen aufzulisten, also z.b. sowas:

    SELECT * FROM `test3` `t1` left join `test3` `t2` on `t2`.`id` in (`t1`.`refs`) WHERE `t1`.`id` = 1
    

    Wenn ich es so schreibe geht es:

    SELECT * FROM `test3` `t1` left join `test3` `t2` on `t2`.`id` in (3,4) WHERE `t1`.`id` = 1
    

    was ja klar ist.

    Ich suche jetzt also eine Möglichkeit die Spalte `refs` in eine Form zu bringen, damit dies wie im 2. SQL gezeigt funktioniert.

    Jmd. eine Idee, oder eine Info, dass das evtl. gar nicht geht?

    PS: Ich weiß, dass man (Mehrfach-)Referenzen am Besten in einer eigenen Tabelle unterbringt, also bitte nicht dissen. 🙂



  • Also wenn es denn unbedingt innerhalb eines SQLs sein muss, könnte ich mir ne Lösung mittels Stringverkettung vorstellen (sofern das deine DB unterstützt).
    Also sowas in der Art:

    SELECT t1.* 
    FROM test t1 
        LEFT JOIN test t2 
        ON t2.id = 1
    WHERE 
        -- Steht am Anfang
        t1.refs LIKE CONCATENATE(t2.id || ',%') OR 
        -- Steht am Ende
        t1.refs LIKE CONCATENATE('%,' || t2.id) OR 
        -- In der Mitte
        t1.refs LIKE CONCATENATE('%,' || t2.id || ',%') OR 
        -- Einsam und allein
        t1.refs = t2.id
    


  • Ich musste es ein wenig anders schreiben, aber funzt. Irgendwie bin ich gerade da nicht drauf gekommen. 😞

    Danke.


Anmelden zum Antworten