Mysql pапрос на выборку из 2х разных таблиц

Статус
В этой теме нельзя размещать новые ответы.

terkin

Мой дом здесь!
Регистрация
9 Дек 2006
Сообщения
513
Реакции
200
есть 2 таблицы - в одной записаны пользователи, в другой группы пользователей, нужно сделать выборку которая посчитает сколько пользователей состоит в каждой из груп

Запрос
PHP:
SELECT user_group.id,user_group.name,count(users.id) FROM `user_group`, `users` WHERE user_group.id=users.status GROUP BY user_group.id
возвращает только группу в которой есть пользователи, а как сделать что бы вернул и группы в которых ещё нет пользователей
 
Попробуй SELECT ALL.
 
Такой интсрукции и нету даже :) зачем фигню писать :-]

Может у нас разный mysql?
Ты бы глянул хоть :)

SELECT [STRAIGHT_JOIN]
[SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
[SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] [HIGH_PRIORITY]
[DISTINCT | DISTINCTROW | ALL]
select_expression,...
[INTO {OUTFILE | DUMPFILE} 'file_name' export_options]
[FROM table_references
[WHERE where_definition]
[GROUP BY {unsigned_integer | col_name | formula} [ASC | DESC], ...]
[HAVING where_definition]
[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC], ...]
[LIMIT [offset,] rows | rows OFFSET offset]
[PROCEDURE procedure_name(argument_list)]
[FOR UPDATE | LOCK IN SHARE MODE]]

Хотя в этом случае она похоже не поможет.

Добавлено через 8 минут
Это конечно немного извращение но работает.

PHP:
SELECT user_group.id, user_group.name,count(users.status) 
FROM user_group, users 
WHERE user_group.id=users.status 
GROUP BY user_group.id 
UNION
SELECT user_group.id, user_group.name, 0 
FROM user_group, users 
WHERE user_group.id NOT IN (SELECT users.status FROM users)
GROUP BY user_group.id
 
А за это вот спасибо, пока так пусть побудет, запрос впринципе не критический, а вот про SELECT ALL погорячился, понял теперь что ты имел ввиду, но как его в данном случае употребить не пойму
 
А за это вот спасибо, пока так пусть побудет, запрос впринципе не критический, а вот про SELECT ALL погорячился, понял теперь что ты имел ввиду, но как его в данном случае употребить не пойму

Только учти, что NOT IN работает очень медленно. На таблицах с несколькими десятками тысяч записей вывода можно и не дождаться :)

Тут его ни как не употребишь, он просто явно объявляет включение в вывод дубликатов и пустых строк. Как то он меня выручил, но сейчас того скрипта у меня нет :(

ЗЫ: Спасибо тут говорят кнопкой ;)
 
Только учти, что NOT IN работает очень медленно. На таблицах с несколькими десятками тысяч записей вывода можно и не дождаться :)
Тут часть кода как раз где записей будет не много так что такое решение подойдет.


ЗЫ: Спасибо тут говорят кнопкой ;)

Кнопку ткнул ещё до того как в посте благодарить :)
 
PHP:
SELECT `user_group`.id AS group_id, 
`user_group`.name AS group_name, 
count(`users`.id) AS users_count 
FROM `user_group` 
LEFT JOIN `users` ON `user_group`.id=`users`.status
GROUP BY `user_group`.id
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху