Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Несколько SELECT COUNT в одном запросе / 5 сообщений из 5, страница 1 из 1
12.07.2014, 22:30:57
    #38695154
smarton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько SELECT COUNT в одном запросе
Необходимо получить несколько значений COUNT одним запросом.

Было:
Код: php
1.
2.
3.
$numRows = $db->super_query("SELECT COUNT(*) AS cnt FROM `".PREFIX."_users`");
$numRows = $db->super_query("SELECT COUNT(*) AS cnt_kiev FROM `".PREFIX."_users` WHERE `user_city`='1' ");
$numRows = $db->super_query("SELECT COUNT(*) AS cnt_kharkov FROM `".PREFIX."_users` WHERE `user_city`='2' ");



Стало:
Код: php
1.
2.
3.
4.
$numRows = $db->super_query("SELECT COUNT(*) AS `cnt`, 
(SELECT COUNT(`user_city`) AS `cnt_kiev` FROM `".PREFIX."_users` WHERE (`user_city`='1') ),
(SELECT COUNT(`user_city`) AS `cnt_kharkov` FROM `".PREFIX."_users` WHERE (`user_city`='2') )
FROM `".PREFIX."_users`");



Но выдает только значение всего - cnt, значения cnt_kiev и cnt_kharkov я не получаю.

Выдача в шаблон:
Код: plaintext
1.
2.
3.
$tpl->set('{cnt}', $numRows['cnt']);
$tpl->set('{cnt_kiev}', $numRows['cnt_kiev']);
$tpl->set('{cnt_kharkov}', $numRows['cnt_kharkov']);



Что неправильно?
...
Рейтинг: 0 / 0
12.07.2014, 22:38:54
    #38695158
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько SELECT COUNT в одном запросе
smartonНеобходимо получить несколько значений COUNT одним запросом.

Было:
Код: php
1.
2.
3.
$numRows = $db->super_query("SELECT COUNT(*) AS cnt FROM `".PREFIX."_users`");
$numRows = $db->super_query("SELECT COUNT(*) AS cnt_kiev FROM `".PREFIX."_users` WHERE `user_city`='1' ");
$numRows = $db->super_query("SELECT COUNT(*) AS cnt_kharkov FROM `".PREFIX."_users` WHERE `user_city`='2' ");



Стало:
Код: php
1.
2.
3.
4.
$numRows = $db->super_query("SELECT COUNT(*) AS `cnt`, 
(SELECT COUNT(`user_city`) AS `cnt_kiev` FROM `".PREFIX."_users` WHERE (`user_city`='1') ),
(SELECT COUNT(`user_city`) AS `cnt_kharkov` FROM `".PREFIX."_users` WHERE (`user_city`='2') )
FROM `".PREFIX."_users`");



Но выдает только значение всего - cnt, значения cnt_kiev и cnt_kharkov я не получаю.

Выдача в шаблон:
Код: plaintext
1.
2.
3.
$tpl->set('{cnt}', $numRows['cnt']);
$tpl->set('{cnt_kiev}', $numRows['cnt_kiev']);
$tpl->set('{cnt_kharkov}', $numRows['cnt_kharkov']);



Что неправильно?


Код: sql
1.
2.
3.
(select count(*) as 'tt' from table)

(select count(*) from table) as 'tt'
...
Рейтинг: 0 / 0
12.07.2014, 22:47:39
    #38695162
smarton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько SELECT COUNT в одном запросе
alex564657498765453
Код: sql
1.
2.
3.
(select count(*) as 'tt' from table)

(select count(*) from table) as 'tt'



Отлично! Очень помогли. Все работает. Спасибо!

Результат:
Код: php
1.
2.
3.
4.
5.
$numRows = $db->super_query("SELECT COUNT(*) AS `cnt`, 
(SELECT COUNT(*) FROM `".PREFIX."_users` WHERE `user_city`='1') AS `cnt_kiev`,
(SELECT COUNT(*) FROM `".PREFIX."_users` WHERE `user_city`='2') AS `cnt_kharkov`,
(SELECT COUNT(*) FROM `".PREFIX."_users` WHERE `user_city`='3') AS `cnt_odessa`
FROM `".PREFIX."_users` {$search_sql}");
...
Рейтинг: 0 / 0
13.07.2014, 12:29:32
    #38695281
anvano
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько SELECT COUNT в одном запросе
А можно одним запросом, чтобы базу не напрягать лишний раз

Код: plsql
1.
2.
3.
4.
SELECT SUM( 1 ) cnt,
           SUM( IF(`user_city`='1',1,0) ) cnt_kiev,
           SUM( IF(`user_city`='2',1,0) ) cnt_kharkov
FROM users



Модератор: Тема перенесена из форума "PHP, Perl, Python".
...
Рейтинг: 0 / 0
13.07.2014, 19:16:29
    #38695437
smarton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Несколько SELECT COUNT в одном запросе
anvanoА можно одним запросом, чтобы базу не напрягать лишний раз

Код: plsql
1.
2.
3.
4.
SELECT SUM( 1 ) cnt,
           SUM( IF(`user_city`='1',1,0) ) cnt_kiev,
           SUM( IF(`user_city`='2',1,0) ) cnt_kharkov
FROM users




Отлично! Это то, что я хотел - одним запросом вытащить количество пользователей по каждому городу, который является региональном центром, а таких 26 (+1 общий - всего). Запрос находится на главной странице, которая достаточно посещаема. И если на каждого посетителя главной будет приходится как минимум 27 запросов, база данных спасибо не скажет.
anvano, спасибо за помощь!
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Несколько SELECT COUNT в одном запросе / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]