MySQL подсчитать записи из 4 таблиц - PullRequest
0 голосов
/ 06 августа 2020

У меня 4 таблицы.

Таблица 1: статьи (есть некоторые продукты)

Таблица 2: компании (есть несколько компаний, например Mitsubishi, Haier et al. c)

Таблица 3: article_categories (имеет несколько идентификаторов категорий, связанных с каждым продуктом)

Таблица 4: article_company (содержит несколько идентификаторов компаний, связанных с каждым продуктом)

Я создал следующий sqlfiddle

http://sqlfiddle.com/#! 9 / 2a3b8d7 / 15

Я хочу подсчитать продукты для каждой компании.

   SELECT comp.CompanyID,comp.title,comp.status,count(aco.ArticleID) as count_articles 
   FROM companies comp 
   inner join article_company aco on aco.CompanyID=comp.CompanyID 
   inner join articles art on art.ArticleID=aco.ArticleID 
   inner join article_category ac on ac.ArticleID=aco.ArticleID 
   where comp.status = 1
   AND ac.CategoryID IN (245,253,259,261,521,263,743) 
   group by comp.CompanyID;

Когда я запускаю запрос я получаю 18 вместо 15.

Если я выполняю следующий запрос, я получаю 15 записей.

    SELECT comp.CompanyID,comp.title,comp.status,count(aco.ArticleID) as count_articles 
    FROM companies comp 
    inner join article_company aco on aco.CompanyID=comp.CompanyID 
    inner join articles art on art.ArticleID=aco.ArticleID 
    where comp.status = 1
    group by comp.CompanyID;

Любые предложения по изменению первого запроса, чтобы получить результаты из второго запроса ?

1 Ответ

1 голос
/ 06 августа 2020
SELECT comp.CompanyID,
       comp.title,
       comp.status,
       count(DISTINCT aco.ArticleID) as count_distinct_articles
FROM companies comp 
inner join article_company aco on aco.CompanyID=comp.CompanyID 
inner join articles art on art.ArticleID=aco.ArticleID 
inner join article_category ac on ac.ArticleID=aco.ArticleID 
where comp.status = 1
AND ac.CategoryID IN (245,253,259,261,521,263,743) 
group by comp.CompanyID;

скрипка

PS. Добавлены лишние информационные столбцы - они удалены из запроса выше.

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