|
|
|
| Добрый день.
Есть вот такие две таблицы:
CREATE TABLE IF NOT EXISTS `table_u` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`login` varchar(32) NOT NULL,
`rid` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
|
и
CREATE TABLE IF NOT EXISTS `table_b` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`uid` int(11) NOT NULL,
`time_order` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
|
и вот такой запрос:
SELECT `table_ur`.`id` AS `id`,
`table_ur`.`login` AS `login`,
COUNT(`table_b`.`id`) AS `num`
FROM (
SELECT `table_u`.`id`,
`table_u`.`login`
FROM `table_u`
WHERE `table_u`.`rid` = 8
) AS `table_ur` LEFT JOIN
`table_b`
ON `table_ur`.`id` = `table_b`.`uid`
GROUP BY `table_ur`.`id`
|
Как бы внятнее сформулировать вопрос...
Вообщем, необходимо выбрать тех пользователей из таблицы `table_u`, у которых поле `rid` равно (к примеру) 8 и которые отметелись в таблице `table_b` (подсчитывается сколько раз они в ней отметились).
При этом, если в таблице `table_b` нет никаких записей с выбранным `id`, то должно выдаваться 0.
я вот нагородил такой запрос (смотрите выше), но может есть и попроще решение?
P.S.: Заранее спасибо за помощь :) | |
|
|
|
|
|
|
|
для: Доктор
(15.06.2009 в 13:29)
| |
SELECT u.id, u.login, COUNT(b.uid) AS num
FROM table_u u
JOIN table_b ON u.id =b.uid
WHERE u.rid = 8
GROUP BY u.id, u.login
HAVING num > 0
|
нет? | |
|
|
|
|
|
|
|
для: Trianon
(15.06.2009 в 14:28)
| | Немножко подправил и все отлично :)
SELECT u.id, u.login,
COUNT( b.uid ) AS num
FROM table_u u LEFT JOIN
table_b b
ON u.id =b.uid
WHERE u.rid =8
GROUP BY u.id
HAVING num >=0
|
Trianon, спасибо вам большое :) ваш запрос выполняется чуть быстрее, так как не создается производной таблицы (как в моем примере). Спасибо :) | |
|
|
|
|
|
|
|
для: Trianon
(15.06.2009 в 14:28)
| | Прошу простить мне мой педантизм)
автор: Trianon (06.06.2009 в 19:44) письмо автору
для: tAleks (06.06.2009 в 19:40)
HAVING вообще не должен появляться в запросах без GROUP BY
|
| |
|
|
|
|
|
|
|
для: Valick
(15.06.2009 в 14:56)
| | ага.строка вывалилась. :)
Поправил.
Цитата исключительно верная. :)) | |
|
|
|
|
|
|
|
для: Trianon
(15.06.2009 в 15:20)
| | Про верность цитаты я и не сомневался (осталось только понять почему)
просто она достаточно крепко засела в моём мозге и как раз поэтому я и обратил внимание на данный запрос, за что и хочу Вам сказать в очередной раз спасибо.
Но если верить "Самоучитель MySQL5 М. Кузнецов И. Симдянов " стр.116, то "Допускается использование HAVING без группирровки GROUP BY." | |
|
|
|
|
|
|
|
для: Valick
(15.06.2009 в 15:32)
| | у каждого своя Библия.... :) | |
|
|
|