hoh*_*ner 38 mysql group-by count left-join having
我有两张桌子:groups
和group_members
.
该groups
表包含每个组的所有信息,例如其ID,标题,描述等.
在group_members
表中,它列出了每个组的所有成员,如下所示:
group_id | user_id
1 | 100
2 | 23
2 | 100
9 | 601
Run Code Online (Sandbox Code Playgroud)
基本上,我想在页面上列出三个组,我只想列出具有四个以上成员的组.在<?php while ?>
循环中,我想要有四个成员,他们是该组的一部分.我没有遇到列出组的麻烦,并将成员列在另一个内部循环中,我只是无法优化组,以便只有超过4个成员的组显示.
有人知道怎么做这个吗?我确信这是MySQL加入的.
Naz*_*riy 75
MySQL使用HAVING语句执行此任务.
您的查询将如下所示:
SELECT g.group_id, COUNT(m.member_id) AS members
FROM groups AS g
LEFT JOIN group_members AS m USING(group_id)
GROUP BY g.group_id
HAVING members > 4
Run Code Online (Sandbox Code Playgroud)
例如,引用具有不同的名称
SELECT g.id, COUNT(m.member_id) AS members
FROM groups AS g
LEFT JOIN group_members AS m ON g.id = m.group_id
GROUP BY g.id
HAVING members > 4
Run Code Online (Sandbox Code Playgroud)
此外,请确保在数据库模式中为您在JOINS中使用的键设置索引,因为它可能会影响您的站点性能.
Ree*_*ale 40
SELECT DISTINCT groups.id,
(SELECT COUNT(*) FROM group_members
WHERE member_id = groups.id) AS memberCount
FROM groups
Run Code Online (Sandbox Code Playgroud)