Mysql选择表依赖于其他两个表

时间:2014-11-07 23:27:39

标签: php mysql sql

我有三个表groupuserbelongs,其中belongsgroupuser之间的关系。

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 ..." 

提前致谢。

2 个答案:

答案 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
相关问题