@VoteyDisciple's antwoord is op de goede weg, maar zijn vraag heeft wat verbeteringen nodig:
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;
Uitleg:
- De
IF()
expressies zijn overbodig omdat gelijkheid al 1 of 0 retourneert. - Neem de
ts1.section_id=1
uit de deelnamevoorwaarde, of je krijgt nooit de anderesection_id
waarden. - Groepeer op
c.id
enkel en alleen. Ik neem aan dat de OP slechts één rij per categorie wil, en kolommen voor het aantal van elkesection_id
waarde voor de betreffende categorie. Als de zoekopdracht is gegroepeerd opc.id, ts1.section_id
, dan zijn er maximaal vier rijen per categorie. - Verplaats de komma's in de selectielijst. Komma's die aan het begin van de regel zweven, zien er lelijk uit.;-)