我有三个表group
,user
和belongs
,其中belongs
是group
和user
之间的关系。
Table group
group_id (pk)
group_name
Table user
user_id (pk)
user_name
Table belongs
user_id
group_id
我想要显示一个随机组,指定组中的人也在。
例如,指定的组是group_id = 1的地方,当然,我可以通过使用
"SELECT user_id FROM user u JOIN belongs b ON u.user_id = b.user_id and b.group_id = '1'"
我一直在努力,现在,我不知道如何选择这些人也在这里的团体。
"SELECT g.* FROM group g WHERE ..."
提前致谢。
答案 0 :(得分:2)
您可以使用额外的join
:
SELECT DISTINCT b2.group_id
FROM user u JOIN
belongs b
ON u.user_id = b.user_id and b.group_id = '1' JOIN
belongs b2
ON b2.user_id = b.user_id;
选择随机此类组的一种方法是使用order by rand() limit 1
。您可能想要添加where b2.group_id <> '1'
。
假设您想要计算这些群组中group_id = 1
的成员,您只需使用group by
:
SELECT b2.group_id, count(distinct b2.user_id) as numusers
FROM user u JOIN
belongs b
ON u.user_id = b.user_id and b.group_id = '1' JOIN
belongs b2
ON b2.user_id = b.user_id
GROUP BY b2.group_id;
加入user
是多余的,但我已经假设它可以用于原始问题中没有的其他条件。
答案 1 :(得分:1)
您可以使用子查询获取与第1组中的人相关联的所有其他组的列表:
SELECT g.group_name, COUNT(g.group_name)
FROM group g
INNER JOIN belongs b ON b.group_id = g.group_id
WHERE b.user_id IN ( SELECT u.user_id FROM user u JOIN belongs b ON u.user_id = b.user_id and b.group_id = '1' )
GROUP BY g.group_name
ORDER BY COUNT(g.group_name) DESC