I\'m trying to get the count of documents within 4 specific sections using the following code:
SELECT
category.id
, category.title
, count(ts1.se
@VoteyDisciple's answer is on the right track, but his query needs some improvements:
SELECT c.id, c.title,
SUM(ts1.section_id = 1) AS doc1,
SUM(ts1.section_id = 2) AS doc2,
SUM(ts1.section_id = 3) AS doc3,
SUM(ts1.section_id = 4) AS doc4
FROM category AS c
LEFT JOIN category_link_section AS ts1
ON (c.id = ts1.category_id)
GROUP BY c.id;
Explanations:
IF()
expressions are redundant because equality already returns 1 or 0.ts1.section_id=1
out of the join condition, or you'll never get the other section_id
values.c.id
only. I assume the OP only wants one row per category, and columns for counts of each section_id
value for the respective category. If the query grouped by c.id, ts1.section_id
, then there'd be up to four rows per category.You might want to try something like this:
SELECT
category.id
, category.title
, SUM(IF(ts1.section_id = 1, 1, 0)) AS doc1
, SUM(IF(ts1.section_id = 2, 1, 0)) AS doc2
, SUM(IF(ts1.section_id = 3, 1, 0)) AS doc3
, SUM(IF(ts1.section_id = 4, 1, 0)) AS doc4
FROM
category
LEFT JOIN category_link_section AS ts1
ON (category.id = ts1.category_id AND ts1.section_id = 1)
GROUP BY category.id, ts1.section_id