Mysql: Genau ein Ergebnis pro Master-Datensatz
Schnickelfritz
- datenbank
0 Tom
Ausgangssituation:
tabelle Master = id(int PK), titel(varchar)
tabelle Slave = id(int PK), fk_Master(int), alternativtitel(varchar)
Beispieldaten Master:
id | titel
---+-----------
1 | Schnickel
2 | Fritz
3 | Heinz
4 | Otto
Beispieldaten Slave:
id | fk_Master | alternativtitel
---+-----------+-----------------------------------
1 | 2 | Fritz - Der kleine Idiot
2 | 2 | Fritz - Er kann es nicht lassen
3 | 3 | Heinz seine erste Grammatikstunde
4 | 4 | Otto Teil 1
5 | 4 | Otto ist von hinten wie von vorn
Left Loin:
SELECT m.id,m.titel,s.alternativtitel FROM Master m LEFT JOIN Slave s ON m.id=s.fk_Master
Ergebnis:
m.id | m.titel | s.alternativtitel
-----+-----------+-----------------------------------
1 | Schnickel | NULL
2 | Fritz | Fritz - Der kleine Idiot
2 | Fritz | Fritz - Er kann es nicht lassen
3 | Heinz | Heinz seine erste Grammatikstunde
4 | Otto | Otto Teil 1
4 | Otto | Otto ist von hinten wie von vorn
Will ich aber nicht. Ich will nur ein Ergebnis pro Master-Datensatz mit "zusammengefassten" Slave-Datensätzen, also in etwa:
id | titel | alternativtitelgesammeltmittrenner
-----+-----------+------------------------------------------------------------------
1 | Schnickel | NULL
2 | Fritz | Fritz - Der kleine Idiot[trenner]Fritz - Er kann es nicht lassen
3 | Heinz | Heinz seine erste Grammatikstunde
4 | Otto | Otto Teil 1[trenner]Otto ist von hinten wie von vorn
Jemand eine Idee? Bin heute etwas langsam bei dieser Hitze ... (prima Ausrede ...)
Hello,
mysql?
siehe group_concat()
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Das war es! Danke!
Es gab hierzu -- zu group_concat() -- natürlich bereits Einträge im Forum, was bedeutet, dass mein "Engagement [...] das Problem [...] selbst zu lösen" (siehe Charta) wohl nicht ausreichend groß war. Sorry. Andererseits: wenn man die Vokabel nicht kennt ... (man könnte mir natürlich vorwerfen: "Lern erstmal mysql!" -- naja, blahblah ...)
Der Vollständigkeit halber: Hier das funktionierende sql-Dings:
SELECT m.id, m.titel, GROUP_CONCAT(s.alternativtitel SEPARATOR '[trenner]') AS gr_alternativ
FROM master AS m
LEFT JOIN slave AS s ON m.id=s.fk_master
GROUP BY m.id,m.titel
ergibt:
id | titel | gr_alternativ
-----+-----------+-----------------------------------------------------
1 | Schnickel | NULL
2 | Fritz | Fritz - Der kleine Idiot[trenner]Fritz - Er kann es nicht lassen
3 | Heinz | Heinz seine erste Grammatikstunde
4 | Otto | Otto Teil 1[trenner]Otto ist von hinten wie von vorn
Wow! Was es alles gibt! Super!