我有一个带有group(g1)的数据库和一个members(m1)列表,它本身工作得很好。
但是,我想添加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..etc)
成员组称为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
想法?
发布于 2010-03-06 21:52:09
我认为你试图代表团体和成员之间的多对多关系。
要做到这一点,您需要一个组表,每个组都有一行。GroupID,GroupName,随便吧,随便吧。
您需要一个每个人都有一行的成员表。MemberID,Firstname,Lastname,随便什么。
然后,您需要一个连接表,一个组成员表。最简单的组成员关系表有如下所示的行
MemberID,GroupID
它每组成员有一行。如果应用程序需要,可以将其他内容添加到此表中,如DateJoined或ActiveMembership或其他任何东西。
然后,您将使用joins来获取数据。如果您想要“极客”组中的成员列表,您可以使用这样的联接。
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这是一个非常有用的设计模式。祝好运。
https://stackoverflow.com/questions/2392913
复制相似问题