2010-03-28 4 views
0

У меня есть 3 пользователя таблицы (id, name), groups (id, name) и users_groups (user_id, group_id). пользователи и группы имеют много разных отношений, поэтому третий - для хранения отношений пользователей и групп. Я хотел бы выбрать все данные из групп с подсчетом пользователя в каждой группе. До сих пор я пришел с этим:Проблема с подсчетом MySQL

SELECT groups.*, COUNT(users_groups.user_id) AS user_count 
FROM groups 
LEFT JOIN users_groups ON users_groups.group_id = groups.id 

Проблема заключается в том, что результат запроса не возвращает какой-либо из групп, которые не имеет пользователей (users_groups оленьей кожи имеет какие-либо записи с group_id из этих групп).


Как мне создать мой запрос, чтобы выбрать все группы, и они количество пользователей, или количество пользователей, как 0, если нет пользователей для этой группы?

ответ

2

Вам просто нужно добавить предложения GROUP BY:

SELECT groups.*, COUNT(users_groups.user_id) AS user_count 
FROM groups 
LEFT JOIN users_groups ON users_groups.group_id = groups.id 
GROUP BY groups.id 

Затем вы получите 0 для user_count для каждой группы, которая не имеет соответствующие записи users_groups.

2

попробовать что-то вдоль линий

SELECT groups.* 
    , sum(if (ISNULL(users_groups.user_id),0,1)) AS user_count 
FROM groups 
LEFT JOIN users_groups 
    ON users_groups.group_id = groups.id 
GROUP BY groups.id 
+0

Спасибо, он работает хорошо. – skujins

Смежные вопросы