mySQL表链接,组链接到其他成员列表,显示所有成员

时间:2010-03-06 15:10:21

标签: php mysql dreamweaver

我有一个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

想法?

1 个答案:

答案 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

这是一个超级有用的设计模式。祝你好运。