2010-03-06 100 views
0

我有一個group(g1)members(m1)列表的數據庫,它本身工作正常。mySQL錶鏈接,組鏈接到其他成員列表,顯示所有成員

但是我想添加group(g1)的能力來將不同的groups(g2-3)添加到它的列表中,以便查詢將調出所有的members(M1)+(m2-3)作爲結果。

我的表是:

Group(1) Table: Group1, 
Member(2) table: MemberA, MemberB, MemberC etc. 

我想我需要一些類型的連接表,其中,它希望group(1)輸入訂閱Group(2)成員。

我在想鏈接表看起來像:

GroupID, Group Name,GroupID, GROUP subscribed to Name 
Group(1), FancyGroup(1), Group(2), shabby Group(2) 

這就是我想爲Group(1)查詢結果的樣子後,訂閱Group(2)

Fancy Group 
Fancy MemberA 
Fancy MemberB 
Fancy MemberC 
Shabby MemberA 
Shabby Member B 

什麼想法?我意識到這是一個很長的問題,但我不知道一個更短的方法來糾正它?

更新3/9:

這是我的表名:

集團被稱爲family;行是(userid,loginName ..等)
該成員組被稱爲member;行是(memberid,loginName,name,等)
連接表被稱爲user2member;行是(userid,memberid)。

這是我使用的查詢內容:

SELECT member.name 
    FROM family 
     JOIN user2member on family.userid = member.memberid 
     JOIN member on user2member.name = member.name 
  WHERE family.userid = '30' 
    ORDER BY member.name 

我剛開這個錯誤:~...syntax to use near 'Â WHERE family.userid = '30' ORDER BY member.name LIMIT 0, 30' at line 5

想法?

回答

2

我想你試圖代表組和成員之間的多對多關係。

要做到這一點,您需要一個組表,每組有一行。 GroupID,GroupName,無論什麼。

您需要一個包含每個人一行的成員表。 MemberID,名,姓,無論什麼。

然後您需要一個連接表,一個groupmembership表。最簡單的組成員表中有這樣

MEMBERID行,羣ID

它每組成員一行。如果您的應用程序需要它們,例如DateJoined或ActiveMembership或其他,您可以將其他內容添加到此表中。

然後,您將使用連接來恢復數據。如果你想要「怪才」組中的成員名單,你可以使用這樣的連接。

SELECT m.Firstname, m.Lastname 
    FROM group g 
    JOIN groupmembership gm on g.GroupID = gm.GroupID 
    JOIN member m on gm.MemberID = m.MemberID 
WHERE g.GroupName = 'geeks' 
ORDER BY m.Lastname, m.Firstname 

如果你想要一個不屬於任何組的成員列表,你應該這樣做。

SELECT m.Firstname, m.Lastname 
    FROM member m 
    LEFT JOIN groupmembership gm on m.MemberID = gm.MemberID 
WHERE gm.GroupID IS NULL 
ORDER BY m.Lastname, m.Firstname 

這是一個超級有用的設計模式。祝你好運。

+0

我添加了正確的組名和成員名稱。我感到困惑。我也把你的查詢與我的變量。我得到這個代碼: 錯誤1064 - 你的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以找到正確的語法,以便在第3行的'JOIN user2member gm上使用g.memberid = gm.userid JOIN成員m上的gm.name = m' – 2010-03-07 15:25:38

+0

我發佈了一個新問題用你回答......我想我走在正確的軌道上。我認爲這個新問題措辭更好。 感謝您的幫助。 – 2010-03-10 14:04:53

+0

你是對的,我沒有真正測試這個東西,對此感到抱歉。是不是1064是一個很好的錯誤信息? – 2010-03-11 02:52:01