2011-07-10 37 views
0

我是MySQL的新手,並從多個表中選擇項目時遇到問題。PHP/MySQL多表連接/工會

我有3個表(用戶,組,group_members)。下面是每個表都有:

  • 用戶:USER_ID,USER_EMAIL,USER_NAME
  • 組:GROUP_ID,組名
  • group_members:GROUP_ID邀請,USER_ID

鑑於USER_ID我想找到user_emailuser_name,group_idgroup_name在一個查詢中。問題是,用戶可以一次在3個組中,因此在我的查詢中,我需要從group_members和groups表中獲取三行。任何幫助將不勝感激,以下是我的兩個最好的嘗試。

SELECT groups.group_id, groups.group_name, users.user_email, users.user_name 
    FROM groups, membership, users 
    WHERE membership.user_id=<user id> AND 
      membership.group_id = groups.group_id LIMIT 3; 

SELECT groups.group_id, groups.group_name, users.user_email, users.user_name 
    FROM groups 
     LEFT JOIN membership ON groups.group_id = membership.group_id 
     LEFT JOIN users ON membership.user_id = users.user_id 
    WHERE (users.user_id = <user id>); 

我能夠得到group_id和group_name的一行,但不是全部3.感謝您的幫助。

回答

0

使用此查詢:這裏

SELECT groups.group_id, groups.group_name, users.user_email, users.user_name 
    FROM groups, membership, users 
    WHERE users.user_id=%s AND 
      membership.user_id=users.user_id AND 
      membership.group_id = groups.group_id 
    LIMIT 3 
0
SELECT groups.group_id, groups.group_name, users.user_email, users.user_name 
FROM users 
    left inner join membership on membership.user_id = users.user_id 
    inner join groups.group_id on groups.group_id = membership.group_id 
Where users.user_id = %user_id% 

問題,你會得到儘可能多的行與重複的電子郵件和用戶名,因爲許多團體用戶所屬。如果你只需要一次用戶名和電子郵件,並且需要一個組列表,那麼它將是2個請求。

但是,如果用戶不屬於任何組,則這也會返回帶有位於group_id和group_name中的空位的用戶名和電子郵件。

+0

如果只是爲了顯示,你可以考慮select ..., group_concat(groups.group_name) from ... group by users.user_id Inca