php - Mysql select table 依赖另外两张表

标签 php mysql sql

我有三个表 groupuserbelongs 其中 belongsgroup< 之间的关系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 ..." 

提前致谢。

最佳答案

您可以使用额外的 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是多余的,但我假设它可能用于原始问题中没有的其他一些条件。

关于php - Mysql select table 依赖另外两张表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26811760/

相关文章:

php - 如何在 session 销毁时更新 mysql 数据库

php - 无法将表情符号存储在数据库中

使用左连接和从连接表排序时,MySQL 查询花费的时间太长

sql - Postgres,使用列中的值将结果聚合到单行

php - PHP 中的图像处理和创建 - 如何创建 300DPI 图像

php - 如何编写查询以获取不同行的列值,并通过逗号分隔成PHP中的单行

mysql - 如何在mysql中查看时间比较

PHP:在一个表和另一个表中搜索

MySQL 条件分组

sql - 在 PostgreSQL 中查找所有范围集的所有交集