SQL-запрос, чтобы получить количество товаров для каждой категории - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть база данных для интернет-магазина.Я пытаюсь узнать количество активных продуктов для каждой категории.

Код для этого:

SELECT c.id_category, COUNT(cp.id_product) AS nproducts
FROM ps_category AS c
LEFT JOIN ps_category_product AS cp ON cp.id_category=c.id_category
LEFT JOIN ps_product AS p ON p.id_product=cp.id_product
WHERE p.active=1
GROUP BY c.id_category 
ORDER BY nproducts ASC

Однако категории с 0 продуктами не отображаются.Чего мне не хватает?

1 Ответ

0 голосов
/ 14 ноября 2018

Удалите WHERE p.active=1, что приведет к сбою для любых категорий, у которых нет продуктов (в результате чего запрос не будет возвращать строки для этих категорий) и переместите это условие в предложение ON для этого LEFT JOIN. Таким образом, вы все равно получите строку NULL для этих категорий, что позволит им показывать как имеющие 0 продуктов.

SELECT c.id_category, COUNT(p.id_product) AS nproducts
FROM ps_category AS c
LEFT JOIN ps_category_product AS cp ON cp.id_category=c.id_category
LEFT JOIN ps_product AS p ON p.id_product=cp.id_product AND p.active=1
GROUP BY c.id_category 
ORDER BY nproducts ASC

Обратите внимание, что для подсчета только активных продуктов необходимо учитывать p.id_product, а не cp.id_product.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...