2010-12-27 8 views
0

J'ai trois tables, qui sont comme:MySQL - La collecte de lignes liées d'une autre table

users 
--------------- 
id 
etc... 

badges 
--------------- 
id 
title 
etc... 

badges_data 
--------------- 
badge_id 
user_id 

Ce que je suis en train de faire est de sélectionner un ensemble d'environ 100 utilisateurs, et également saisir tous les badges qu'ils avoir, et les montrer à côté de leurs utilisateurs respectifs.

Quelle est la meilleure façon de procéder?

Répondre

3
select 
    users.*, 
    group_concat(badges.id, '=', badges.title separator ';') as badges_info 
from users 
left join badges_data on badges_data.user_id=users.id 
inner join badges on badges.id=badges_data.badge_id 
group by users.id 
limit 100; 

ci-dessus renverront des données telles que

user.*, 
badges_id=title;badges_id=title; ... 

Si vous pensez que le format retourné par group_concat est difficile à lire/analyser

select 
    users.*, 
    badges.* 
from users 
left join badges_data on badges_data.user_id=users.id 
inner join badges on badges.id=badges_data.badge_id 

cela renvoie plusieurs lignes pour un même utilisateur si l'utilisateur a plusieurs badges

+0

Le premier a fait le tour, merci! –

Questions connexes