@VoteyDisciples svar er på rette vej, men hans forespørgsel har brug for nogle forbedringer:
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;
Forklaringer:
IF()
udtryk er overflødige, fordi lighed allerede returnerer 1 eller 0.- Tag
ts1.section_id=1
ud af join-betingelsen, ellers får du aldrig den andensection_id
værdier. - Gruppér efter
c.id
kun. Jeg antager, at OP kun ønsker en række pr. kategori og kolonner for tællinger af hversection_id
værdi for den respektive kategori. Hvis forespørgslen er grupperet efterc.id, ts1.section_id
, så ville der være op til fire rækker pr. kategori. - Flyt kommaerne i valglisten. Kommaer, der svæver i begyndelsen af linjen, ser grimme ud.;-)