запрос типа select + count()

desperado

Новичок
запрос типа select + count()

задача:
сделать запрос по таблице с подсчетом кол-ва тех или иных записей, относящихся к одной категории.

пример:
таблица с н-ным кол-во строк. по полю (скажем category), делаем подсчет записей, относящихся к данной категории. типа [ЦВЕТОМ=darkred]select count(category) as total where category like "%(x)%"[/ЦВЕТОМ]. (где (x) в формате |1|, |2|, или |1|2|, и т.д., т.к. одна и таже запись может быть в нескольких категория)


в принцепе задача проста, но хотелось бы сделать енто все в одном запросе, т.к. категорий уже сейчас порядка 20 штук, не делать же 20 запросов. я пробовал написать это в виде
[ЦВЕТОМ=darkred]select count(cid) as total_cid1 from books_books where cid like "%|1|%", count(cid) as total_cid2 from books_books where cid like "%|2|%"[/ЦВЕТОМ], но пишет, что обшибка.

может, кто подскажет, где я тут напортачил, или прделожет рабочий вариант, или вообще иную структуру.
 

desperado

Новичок
ага, только как я понимаю он подсчитает |1|2|, как один блок, |2|3|, как второйб и |1|, как третий. а надо что бы было в одном все 1, в другом все 2, в третьем все 3
 

chira

Новичок
Если у тебя есть записи c отдельными категориями
category = |1|
то
select a.cid,count(a.cid) as total_cid1
from books_books a ,books_books b
where a.cid like "|_|" AND b.cid like CONCAT('%',a.cid,'%')
group by 1
 
Сверху