Количество сообщений категории - PullRequest
1 голос
/ 18 апреля 2011

Я строю блог с Codeigniter и MySQL.У меня вопрос такой: у меня есть таблица с сообщениями и одна с категориями.У меня также есть таблица перекрестных ссылок с post_categories.То, что я пытаюсь сделать, это получить все категории с их именами и количеством публикаций, которые они имеют под своим именем.

Пример вывода будет: Hello World (1) Test (0) и т. Д.

Мне трудно найти SQL-запрос, который объединит три таблицы и подсчитает мне количество, и мне также трудно найти способ выполнить этот запрос.

Вот моя схема таблицы:

blgpost
====
id
*Other schema unimportant

blgpostcategories
=================
postid
categoryid

blgcategories
==========
id
name
*Other schema unimportant

Ответы [ 3 ]

3 голосов
/ 18 апреля 2011

Это должно дать вам желаемый результат ....

SELECT c.name, COUNT(p.id) FROM
blgcategories c 
INNER JOIN blgpostcategories pc ON c.id = pc.categoryid
INNER JOIN blgpost p ON pc.postid = p.id
GROUP BY c.id
1 голос
/ 18 апреля 2011

Вам не нужно объединять три таблицы - в таблице blgpost нет нужной вам информации.

SELECT COUNT(*), blgcategories.name 
FROM blgcategories INNER JOIN blgpostcategories 
ON blgcategories.id=blgpostcategories.categoryid 
GROUP BY blgcategories.id;
0 голосов
/ 18 апреля 2011
SELECT  name, COUNT(pc.id)
FROM    blgcategories c
LEFT JOIN
        blgpostcategories pc
ON      pc.categoryid = c.id
GROUP BY
        c.id

Использование LEFT JOIN покажет 0 для пустых категорий (которые не имеют связанных с ними сообщений), а не пропустит их.

...