Как выбрать одним запросом кол-во повторений чисел в столбце?

evshi

Новичок
Как выбрать одним запросом кол-во повторений чисел в столбце?

В таблице есть столбец со значениями 1 или 2. Как одним запросом вывести по горизонтали кол-во повторов каждого из значений (чтобы можно было через mysql_fetch_array сразу получить). Пробовал вот так
PHP:
(SELECT COUNT(`review_type`) FROM `reviews` WHERE `obj_id`='32' AND `review_type`=1)
UNION
(SELECT COUNT(`id`) FROM `reviews` WHERE `obj_id`='32' AND `review_type`=2)
но так выводит построчно, т.е. mysql_fetch_array от такого запроса вернет только кол-во повторений `review_type`=1, а надо чтобы в массиве было кол-во повторений `review_type`=1 и `review_type`=2.

Как выбрать одним запросом?
 

prolis

Новичок
[sql]
select sum(if(review_type=1,1,0)) as cnt_1,
sum(if(review_type=2,1,0)) as cnt_2 from
reviews where obj_id=32
[/sql]
 

evshi

Новичок
Спасибо!

А что в review_type = 1, 1, 0 значат "1, 0" (первое значение - понятно)?
 

evshi

Новичок
История получила продолжение:)

Мне надо к результатам вышеприведенного запроса прибавить 5, если в другой таблице есть значение в поле `back_link` или 0, в противном случае.

Сделал так:
[SQL]
IF((

select `back_link` from (
select * from `clubs`
) as tmp
where id=32

) IS NULL, 0, 5))
[/SQL]
Выглядит странно, объясню ниже почему.

Если посмотреть глобально на мою задачу, то мне надо, проведя выше указанные операции, результат записать в поле `rating` таблицы `clubs`, но среди выше указанных операций УЖЕ есть обращение этой таблице, в следствие чего выводится ошибка You can't specify target table 'clubs' for update in FROM clause. Поискав в интернете нашел пару решений http://www.xaprb.com/blog/2006/06/23/how-to-select-from-an-update-target-in-mysql/ и http://forums.devshed.com/mysql-help-4/update-cannot-specify-target-table-in-from-clause-513821.html - по моему одно и тоже.

Полный запрос того, что получилось, выглядит так:
[SQL]
update `clubs` set `rating`=(

SELECT (
TRUNCATE((
sum(IF (review_type = 1, 1, 0) ) /
sum(IF (review_type = 2, 1, 0) ) ),1)
+
IF((

select `back_link` from (
select * from `clubs`
) as tmp
where id=32

) IS NULL, 0, 5))

FROM reviews
WHERE obj_id = 32

)
WHERE id = 32
[/SQL]

По частям работает, а вот при update ошибка. Можно ли ее как-то обойти или единственное решение - использовать 2 запроса?
 

prolis

Новичок
[sql]
update clubs set rating=(
select
TRUNCATE((
sum(IF (review_type = 1, 1, 0) ) /
sum(IF (review_type = 2, 1, 0) ) ),1)
+ if(clubs.back_link,null,0,5)
from reviews
WHERE reviews.obj_id = clubs.id
)
where id=32
[/sql]
 
Сверху