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.