powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Несколько SELECT COUNT в одном запросе
5 сообщений из 5, страница 1 из 1
Несколько SELECT COUNT в одном запросе
    #38695154
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']);



Что неправильно?
...
Рейтинг: 0 / 0
Несколько SELECT COUNT в одном запросе
    #38695158
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Несколько SELECT COUNT в одном запросе
    #38695162
smarton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Несколько SELECT COUNT в одном запросе
    #38695281
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



Модератор: Тема перенесена из форума "PHP, Perl, Python".
...
Рейтинг: 0 / 0
Несколько SELECT COUNT в одном запросе
    #38695437
smarton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Несколько SELECT COUNT в одном запросе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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