MySQL从另一个表连接和COUNT(*)

我有两张桌子:
groups
group_members
groups
表包含每个组的所有信息,例如其ID,标题,描述等。 在
group_members
表中,它列出了每个组的所有成员,如下所示:
group_id | user_id
1 | 100
2 | 23
2 | 100
9 | 601
基本上,我想在页面上列出三个组,我只想列出具有四个以上成员的组。在
<?php while ?>
循环中,我想要有四个成员,他们是该组的一部分。我没有遇到列出组的麻烦,并将成员列在另一个内部循环中,我只是无法优化组,以便只有超过4个成员的组显示。 有人知道怎么做这个吗?我确信这是MySQL加入的。     
已邀请:
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
例如,引用具有不同的名称
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
此外,请确保在数据库模式中为您在JOINS中使用的键设置索引,因为它可能会影响您的站点性能。     
SELECT DISTINCT groups.id, 
       (SELECT COUNT(*) FROM group_members
        WHERE member_id = groups.id) AS memberCount
FROM groups
    
你的
groups_main
表有一个名为
id
的关键列。我相信如果
groups_fans
表有一个具有相同名称的键列,则它只能使用
USING
语法进行连接,它可能不会。所以,试试这个:
LEFT JOIN groups_fans AS m ON m.group_id = g.id
或者用
groups_fans
表中的任何相应列名替换
group_id
。     
也许我在这里不合时宜而且不了解OP,但你为什么要加入牌桌呢? 如果您有一个包含成员的表,并且该表有一个名为“group_id”的列,则可以在成员表上运行查询以获取按group_id分组的成员计数。
SELECT group_id, COUNT(*) as membercount 
FROM members 
GROUP BY group_id 
HAVING membercount > 4
这应该是最小的开销,因为你正在避免加入,但仍然应该给你你想要的。 如果您想要组详细信息和描述等,则将成员表中的联接添加回组表以检索名称将为您提供最快的结果。     

要回复问题请先登录注册