MySQL加入并从另一个表中计数(*)
题
我有两个桌子: groups
和 group_members
.
这 groups
表包含每个组的所有信息,例如其ID,标题,描述等。
在里面 group_members
表,它列出了这样的每个组中的所有成员:
group_id | user_id
1 | 100
2 | 23
2 | 100
9 | 601
基本上,我想在一个页面上列出三个组,我只想列出拥有四个以上成员的组。在 - 的里面 <?php while ?>
循环,我想让四个成员分开。我在列出这些组并在另一个内部循环中列出成员毫无疑问,我只是无法完善这些组,以便只有超过4个成员的人显示。
有人知道怎么做这个吗?我敢肯定是与MySQL连接在一起。
解决方案
mysql使用 有 此任务的声明。
您的查询看起来像这样:
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
另外,请确保您在数据库架构中设置索引以在连接中使用的键,因为它可能会影响您的站点性能。
其他提示
SELECT DISTINCT groups.id,
(SELECT COUNT(*) FROM group_members
WHERE member_id = groups.id) AS memberCount
FROM groups
您的 groups_main
表有一个键列 id
. 。我相信你只能使用 USING
如果是 groups_fans
表具有带有相同名称的键列,它可能没有。因此,请尝试以下操作:
LEFT JOIN groups_fans AS m ON m.group_id = g.id
或更换 group_id
无论适当的列名在 groups_fans
桌子。
也许我在这里脱颖而出,不了解OP,但是您为什么要加入桌子?
如果您有一个带有成员的表,并且该表的列名为“ group_id”,则可以在成员表上运行查询,以获取由group_id分组的成员计数。
SELECT group_id, COUNT(*) as membercount
FROM members
GROUP BY group_id
HAVING membercount > 4
这应该只有最少的间接费用,仅仅是因为您避免了加入,但仍然应该给您想要的东西。
如果您想要组的详细信息和描述等,请添加从成员表中添加一个加入到组表中以检索名称将为您带来最快的结果。
不隶属于 StackOverflow