resposta do @VoteyDisciple está no caminho certo, mas sua consulta precisa de algumas melhorias:
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;
Explicações:
- O
IF()
expressões são redundantes porque a igualdade já retorna 1 ou 0. - Pegue o
ts1.section_id=1
fora da condição de junção, ou você nunca obterá o outrosection_id
valores. - Agrupar por
c.id
só. Suponho que o OP queira apenas uma linha por categoria e colunas para contagens de cadasection_id
valor para a respectiva categoria. Se a consulta for agrupada porc.id, ts1.section_id
, haveria até quatro linhas por categoria. - Mova as vírgulas na lista de seleção. Vírgulas flutuando no início da linha parecem feias.;-)