MySQL соединяется и COUNT (*) из другой таблицы
У меня есть две таблицы: groups
и group_members
.
Таблица groups
содержит всю информацию для каждой группы, такую как ее идентификатор, заголовок, описание и т.д.
В таблице group_members
перечислены все члены, которые отделены от каждой группы следующим образом:
group_id | user_id
1 | 100
2 | 23
2 | 100
9 | 601
В принципе, я хочу перечислить три группы на странице, и я хочу только перечислить группы, у которых более четырех членов. Внутри цикла <?php while ?>
я хочу, чтобы четыре члена были отделены от этой группы. У меня нет проблем с перечислением групп и перечислением членов в другом внутреннем цикле, я просто не могу усовершенствовать группы, чтобы показать ТОЛЬКО те, у которых более четырех участников.
Кто-нибудь знает, как это сделать? Я уверен, что с подключением MySQL.
Ответы
Ответ 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
Это должно иметь наименьшие издержки просто потому, что вы избегаете объединения, но все равно должны давать вам то, что вы хотели.
Если вам нужны детали и описание группы и т.д., добавьте соединение из таблицы участников обратно в таблицу групп, чтобы получить имя, даст вам самый быстрый результат.