odpowiedź @VoteyDisciple jest na dobrej drodze, ale jego zapytanie wymaga pewnych ulepszeń:
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;
Wyjaśnienia:
IF()
wyrażenia są zbędne, ponieważ równość już zwraca 1 lub 0.- Weź
ts1.section_id=1
z warunku dołączenia lub nigdy nie dostaniesz drugiegosection_id
wartości. - Grupuj według
c.id
tylko. Zakładam, że OP chce tylko jednego wiersza na kategorię i kolumn dla liczebności każdegosection_id
wartość dla odpowiedniej kategorii. Jeśli zapytanie pogrupowane wedługc.id, ts1.section_id
, wtedy w każdej kategorii byłyby maksymalnie cztery wiersze. - Przenieś przecinki na liście wyboru. Przecinki pływające na początku linii wyglądają brzydko.;-)