我有一个包含group(g1)
和members(m1)
列表的数据库,它本身工作得很好。
但是,我想添加 group(g1)
的功能,将不同的 groups(g2-3)
添加到其列表中,以便查询会显示所有结果是members(M1)+(m2-3)
。
我的 table 是:
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)组称为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
我遇到了这个错误:~...在第 5 行的“WHERE family.userid = '30' ORDER BY member.name LIMIT 0, 30”附近使用的语法
想法?
最佳答案
我认为您正在尝试表示群组和成员之间的多对多关系。
为此,您需要一个组表,每个组对应一行。 GroupID、GroupName,无论什么,无论什么。
您需要一个成员表,其中每个人一行。 成员(member)ID、名字、姓氏,等等,等等。
然后您需要一个连接表、一个组成员资格表。最简单的组成员资格表有这样的行
成员(member)ID、群组ID
每个组的每个成员都有一行。如果您的应用程序需要,您可以向此表添加其他内容,例如 DateJoined 或 ActiveMembership 或其他内容。
然后,您可以使用联接来取回数据。如果您想要“geeks”组中的成员列表,您可以使用这样的联接。
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
这是一个 super 有用的设计模式。祝你好运。
关于php - mySQL表链接,组链接到其他成员列表,显示所有成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2392913/