[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как сделать запрос с несколькими COUNT?
Qvatro
Ребят подскажите как сделать правильный запрос с несколькими COUNT:
$Mainclass->Db->Query('SELECT COUNT (`prefix_users`.`id`) AS `user_id`, COUNT(`prefix_blogs_posts`.`author_id`) AS `p_uid`, COUNT(`prefix_comments`.`uid`) AS `uid`
FROM `prefix_users`
LEFT JOIN `prefix_comments`
LEFT JOIN `prefix_blogs_posts` ON `user_id`=`p_uid` ON `user_id`=`uid` '
);

Вот что у меня получилось, но это не работает



Спустя 1 час, 14 минут, 51 секунда (17.06.2012 - 10:51) Placido написал(а):
Конечно, не получится.
Во-первых, синтаксис Join-ов неверный. Условие ON должно идти сразу после JOIN.
Во-вторых, в условии ON должны использоваться имена полей вкупе либо с именами таблиц, либо с их псевдонимами (например, ON `prefix_users`.`user_id`= `prefix_comments`.`p_uid`).
Во-третьих, COUNT() обычно используется вместе с GROUP BY.
И, в-четвертых, простой COUNT() сразу по трем таблицам не будет работать правильно, см. недавнюю тему.

Спустя 40 минут, 45 секунд (17.06.2012 - 11:32) varvar написал(а):
смотря что нужно получить запросом, если я правильно понял, то нужно выбрать одним запросом id пользователя и количество его постов и комментов, тогда можно что-то типо так (ессесно не проверял, но идея думаю ясна):


SELECT `u`.`id`,`p`.`p_cnt`,`c`.`c_cnt` FROM `prefix_users` `u`
LEFT JOIN
(
SELECT `author_id`,COUNT(`author_id`) AS `p_cnt` FROM `prefix_blogs_posts` GROUP BY `author_id`
) `p` ON `u`.`id`=`p`.`author_id`
LEFT JOIN
(
SELECT `uid`,COUNT(`author_id`) AS `c_cnt` FROM `prefix_comments` GROUP BY `uid`
) `c` ON `u`.`id`=`c`.`uid`

Спустя 1 день, 8 часов, 10 минут, 10 секунд (18.06.2012 - 19:42) Qvatro написал(а):
Placido
varvar
спасибо
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.