MySQL joins and COUNT(*) from another table

前端 未结 4 1297
失恋的感觉
失恋的感觉 2020-12-23 19:42

I have two tables: groups and group_members.

The groups table contains all the information for each group, such as its ID, tit

相关标签:
4条回答
  • 2020-12-23 19:54

    MySQL use HAVING statement for this tasks.

    Your query would look like this:

    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
    

    example when references have different names

    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
    

    Also, make sure that you set indexes inside your database schema for keys you are using in JOINS as it can affect your site performance.

    0 讨论(0)
  • 2020-12-23 20:06

    Maybe I am off the mark here and not understanding the OP but why are you joining tables?

    If you have a table with members and this table has a column named "group_id", you can just run a query on the members table to get a count of the members grouped by the group_id.

    SELECT group_id, COUNT(*) as membercount 
    FROM members 
    GROUP BY group_id 
    HAVING membercount > 4
    

    This should have the least overhead simply because you are avoiding a join but should still give you what you wanted.

    If you want the group details and description etc, then add a join from the members table back to the groups table to retrieve the name would give you the quickest result.

    0 讨论(0)
  • 2020-12-23 20:07

    Your groups_main table has a key column named id. I believe you can only use the USING syntax for the join if the groups_fans table has a key column with the same name, which it probably does not. So instead, try this:

    LEFT JOIN groups_fans AS m ON m.group_id = g.id

    Or replace group_id with whatever the appropriate column name is in the groups_fans table.

    0 讨论(0)
  • 2020-12-23 20:15
    SELECT DISTINCT groups.id, 
           (SELECT COUNT(*) FROM group_members
            WHERE member_id = groups.id) AS memberCount
    FROM groups
    
    0 讨论(0)
提交回复
热议问题