Подтвердить что ты не робот

MySQL соединяется и COUNT (*) из другой таблицы

У меня есть две таблицы: groups и group_members.

Таблица groups содержит всю информацию для каждой группы, такую ​​как ее идентификатор, заголовок, описание и т.д.

В таблице group_members перечислены все члены, которые отделены от каждой группы следующим образом:

group_id | user_id
1 | 100
2 | 23
2 | 100
9 | 601

В принципе, я хочу перечислить три группы на странице, и я хочу только перечислить группы, у которых более четырех членов. Внутри цикла <?php while ?> я хочу, чтобы четыре члена были отделены от этой группы. У меня нет проблем с перечислением групп и перечислением членов в другом внутреннем цикле, я просто не могу усовершенствовать группы, чтобы показать ТОЛЬКО те, у которых более четырех участников.

Кто-нибудь знает, как это сделать? Я уверен, что с подключением MySQL.

4b9b3361

Ответ 1

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, так как это может повлиять на производительность вашего сайта.

Ответ 2

SELECT DISTINCT groups.id, 
       (SELECT COUNT(*) FROM group_members
        WHERE member_id = groups.id) AS memberCount
FROM groups

Ответ 3

В таблице groups_main содержится ключевой столбец с именем id. Я считаю, что вы можете использовать синтаксис USING для соединения, если таблица groups_fans имеет ключевой столбец с тем же именем, которого, вероятно, нет. Вместо этого попробуйте следующее:

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

Или замените group_id на любое соответствующее имя столбца в таблице groups_fans.

Ответ 4

Может быть, я здесь не знаком и не понимаю OP, но почему вы соединяетесь с таблицами?

Если у вас есть таблица с членами, и в этой таблице есть столбец с именем "group_id", вы можете просто запустить запрос в таблице участников, чтобы получить количество членов, сгруппированных по group_id.

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

Это должно иметь наименьшие издержки просто потому, что вы избегаете объединения, но все равно должны давать вам то, что вы хотели.

Если вам нужны детали и описание группы и т.д., добавьте соединение из таблицы участников обратно в таблицу групп, чтобы получить имя, даст вам самый быстрый результат.