@VoteyDisciples Antwort ist auf dem richtigen Weg, aber seine Abfrage muss verbessert werden:
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;
Erläuterungen:
- Das
IF()
Ausdrücke sind überflüssig, da Gleichheit bereits 1 oder 0 zurückgibt. - Nehmen Sie
ts1.section_id=1
aus der Join-Bedingung, oder Sie erhalten nie die anderesection_id
Werte. - Gruppieren nach
c.id
nur. Ich nehme an, das OP möchte nur eine Zeile pro Kategorie und Spalten für die Anzahl jedersection_id
Wert für die jeweilige Kategorie. Wenn die Abfrage nachc.id, ts1.section_id
gruppiert ist , dann gäbe es bis zu vier Zeilen pro Kategorie. - Verschieben Sie die Kommas in der Auswahlliste. Schwebende Kommas am Anfang der Zeile sehen hässlich aus.;-)