Отображение строк с количеством 0 в MySQL с использованием COUNT и GROUP BY - PullRequest
1 голос
/ 08 июня 2011

У меня есть две таблицы, Subject и Content, где Content ссылается на Subject с внешним ключом. Я хочу показать, сколько раз каждый предмет появляется в таблице содержимого (0, если он не появляется). Но запрос ниже дает мне только строки с количеством> 0 и игнорирует остальные:

SELECT Subject.id, Subject.name, COUNT(Content.subject_id) AS `count`
FROM Subject LEFT JOIN Content
ON Subject.id = Content.subject_id
WHERE type = @type
GROUP BY Subject.id;

Я проверил и попытался подписаться на этот , этот и этот пост, но по какой-то причине приведенный выше код не работает.

Есть идеи?

Edit: поле типа находится в таблице содержимого, и это вызвало проблему, указав "Will A"

Ответы [ 3 ]

5 голосов
/ 08 июня 2011

В какой таблице находится type столбец?Я предполагаю, что это Content - и, включив поле в предложение WHERE, вы заставляете таблицу Content в правой части LEFT JOIN иметь данные в ней (что означает, что LEFT JOIN на самом деле простоВНУТРЕННЕЕ СОЕДИНЕНИЕ).

Попробуйте:

SELECT Subject.id, Subject.name, COUNT(Content.subject_id) AS `count`
FROM Subject
LEFT JOIN Content
ON Subject.id = Content.subject_id
AND type = @type
GROUP BY Subject.id;
1 голос
/ 08 июня 2011

К какой таблице относится столбец type? Если type в subject, ваше левое соединение должно работать. Поэтому я предполагаю, что type находится в Content. Тогда проблема в том, что ваше предложение WHERE не будет соответствовать случаям, когда в Content нет совпадающих строк. Используйте

WHERE (type = @type) OR (type IS NULL)
0 голосов
/ 08 июня 2011

Вместо этого сделайте внешнее соединение. Замените ноль на 0. Замените ненулевое значение на 1. Вместо счетчика сделайте сумму в этом столбце.

Надеюсь, это поможет

...