MySQL从另一个表加入和COUNT(*)

hoh*_*ner 38 mysql group-by count left-join having

我有两张桌子:groupsgroup_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)