我有一个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
..等)
成员组称为member
;行是(memberid,loginName,name,
等)
Join表名为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
想法?
答案 0 :(得分:2)
我认为你试图代表群体和成员之间的多对多关系。
要执行此操作,您需要一个组表,每个组都有一行。 GroupID,GroupName,无论如何。
您需要一个成员表,每个人都有一行。 会员ID,名字,姓氏,等等。
然后您需要一个连接表,一个groupmembership表。最简单的组成员资格表包含这样的行
MemberID,GroupID
每个成员每组有一行。如果您的应用程序需要它们,您可以在此表中添加其他内容,例如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
这是一个超级有用的设计模式。祝你好运。