несколько count(*), в одном запросе

bevaine

Новичок
несколько count(*), в одном запросе

Необходим подсчет количества поле в одной таблице, в нескольких запросах код выглядит так:
PHP:
>> SELECT COUNT(*)  FROM test WHERE type = 1 AND intype=1
>> SELECT COUNT(*)  FROM test WHERE type = 1 AND intype=2
>> SELECT COUNT(*)  FROM test WHERE type = 1 AND intype=3
, вопрос, можно ли это все объединить в один запрос и есть ли смысл объединять для оптимизации?
 

zerkms

TDD infected
Команда форума
1. UNION
2. SUM(`intype` = 1) AS `t1`, SUM(`intype` = 2) AS `t2`... WHERE type = 1 AND `intype` IN ()

но я бы предпочёл 1.
 

bevaine

Новичок
Автор оригинала: zerkms
1. UNION
2. SUM(`intype` = 1) AS `t1`, SUM(`intype` = 2) AS `t2`... WHERE type = 1 AND `intype` IN ()

но я бы предпочёл 1.
UNION пробывал не получается:
PHP:
SELECT COUNT(*) AS COUNT1 FROM test WHERE type = 1 AND intype=1 
UNION
SELECT COUNT(*) AS COUNT2  FROM test WHERE type = 1 AND intype=2
 

zerkms

TDD infected
Команда форума
"не получается" - так и написал тебе mysql ?
 

bevaine

Новичок
:) нет, выводит только COUNT1, ладно, спасибо за совет воспользуюсь SUM()
 

zerkms

TDD infected
Команда форума
лучше сделай вариант 1. он "правильнее".
 

bevaine

Новичок
zerkms, можно по подробнее написать код первого варианта, а то я что-то с UNION не дружу, чтобы результат выдавался для каждого запроса в разной колонке. И еще если "type" меняется, нужно другой запрос создавать?
 

Grezz

Новичок
а чем не нравится вариант (id - первичный ключ):

SELECT intype, COUNT(id) FROM test WHERE type = 1 GROUP BY intype
 

DiMA

php.spb.ru
Команда форума
затем, что придется дико напрячься и читать ответ в цикле по строчкам
 

bevaine

Новичок
x-yuri легче обрабатывать результат, по имени колонки сразу получить первую запись
Grezz хорошие вариант наверно им и воспользуюсь
 
Сверху