réponse de @VoteyDisciple est sur la bonne voie, mais sa requête nécessite quelques améliorations :
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;
Explications :
- Le
IF()
les expressions sont redondantes car l'égalité renvoie déjà 1 ou 0. - Prenez le
ts1.section_id=1
hors de la condition de jointure, ou vous n'obtiendrez jamais l'autresection_id
valeurs. - Regrouper par
c.id
seulement. Je suppose que l'OP ne veut qu'une ligne par catégorie et des colonnes pour le nombre de chaquesection_id
valeur pour la catégorie respective. Si la requête est regroupée parc.id, ts1.section_id
, il y aurait alors jusqu'à quatre lignes par catégorie. - Déplacez les virgules dans la liste de sélection. Les virgules flottant au début de la ligne ont l'air moche.;-)