我想知道如何使用JOIN或LEFT JOIN来分组用户。
用户表:
id (primary)
user (varchar)
pass (varchar)
email (varchar)
website (varchar)
bio (text)
avatar (varchar)
code (varchar)
active (varchar)
admin (varchar)
group_1 (int) <--- I have a feeling that this is the wrong way to go about it
group_2 (int) <---
group_3 (int) <---
分组表:
group_id (primary key)
group_name (varchar)
group_bio (text)
group_website (varchar)
我想知道如何让一名成员参与多个小组并显示某个小组的成员名单。
这样的事情:
Group Name
Users: <a href='profile'>Name</a>, <a href='profile'>Name</a>, <a href='profile'>Name</a>, <a href='profile'>Name</a>
我完全不知道如何解决这个问题。请帮忙。
答案 0 :(得分:7)
答案 1 :(得分:2)
您必须使用两个字段创建新表 MEMBER_GROUPS : user_id 和 group_id 。
每一行都是用户的成员资格......
通过这种方式,您可以轻松查询组中的用户成员资格......
答案 2 :(得分:1)
这确实是错误的方法,因为它将用户限制为三个组成员身份。这是一个典型的多对多关系,您可以使用桥接表对其进行建模:
user_group ---------- user_id group_id
主键将是user_id
和group_id
的组合,强制实现唯一性。然后你会通过这个表进行双连接。例如,要获取所有组的所有成员:
SELECT group.*, user.*
FROM group
LEFT OUTER JOIN user_group
ON group.group_id = user_group.group_id
LEFT OUTER JOIN user
ON user_group.user_id = user.user_id
或者,如果您在特定群体之后:
SELECT user.*
FROM user_group
INNER JOIN user
ON user_group.user_id = user.user_id
WHERE user_group.group_id = ?
您甚至可以获得所有群组的列表,其中包含会员数:
SELECT group.*, COUNT(user_group.user_id) AS group_membership_count
FROM group
LEFT OUTER JOIN user_group
ON user_group.group_id = group.group_id
GROUP BY group.group_id