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?