Anders är en webbutvecklare och hårdrockare som gillar brädspel, kaffe och öl.

Detta är ett arkiverat inlägg, som importerats hit för referens. Det kan se konstigt ut och innehålla utdaterad information eller inaktuella åsikter.

RFC: Lista grupper som kolumn i SQL-query

En MySQL 5 databas, med följande tabeller (primärnycklar framhävda):

user : id : name : email

group : id : value

groups : userid : groupid

Min mycket eliminenta uppgift var att åstadkomma en SQL query som ger följande resultat:

id name email groups


1 Anders anders@madr.se root,writer,user

Efter litet manualläsande och googlande kom jag fram till att group_concat uppnådde det jag ville göra.

  1. select
  2. user.*,
  3. group_concat(`group`.value) as `groups`
  4. from user
  5. left join (`groups`,`group`)
  6. on (`groups`.userid=user.id and
  7. `group`.id=`groups`.groupid)
  8. group by `groups`.userid;

Det måste finnas några nackdelar!

Jag erkänner att SQL inte är min starka sida och därför vill jag nu ha hjälp. Vilka index bör jag sätta förutom nycklarna, om några? Finns det bättre och skonsammare sätt än group_concat?