La respuesta de @VoteyDisciple va por buen camino, pero su consulta necesita algunas mejoras:
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;
Explicaciones:
- El
IF()
las expresiones son redundantes porque la igualdad ya devuelve 1 o 0. - Tome el
ts1.section_id=1
fuera de la condición de unión, o nunca obtendrá el otrosection_id
valores. - Agrupar por
c.id
solamente. Supongo que el OP solo quiere una fila por categoría y columnas para los recuentos de cadasection_id
valor para la categoría respectiva. Si la consulta está agrupada porc.id, ts1.section_id
, entonces habría hasta cuatro filas por categoría. - Mueva las comas en la lista de selección. Las comas que flotan al comienzo de la línea se ven feas.;-)