jawaban @VoteyDisciple berada di jalur yang benar, tetapi kuerinya memerlukan beberapa perbaikan:
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;
Penjelasan:
IF()
ekspresi berlebihan karena kesetaraan sudah mengembalikan 1 atau 0.- Ambil
ts1.section_id=1
keluar dari kondisi bergabung, atau Anda tidak akan pernah mendapatkansection_id
lainnya nilai. - Kelompokkan menurut
c.id
hanya. Saya berasumsi OP hanya menginginkan satu baris per kategori, dan kolom untuk jumlah setiapsection_id
nilai untuk kategori yang bersangkutan. Jika query dikelompokkan berdasarkanc.id, ts1.section_id
, maka akan ada hingga empat baris per kategori. - Pindahkan koma di daftar pilih. Koma mengambang di awal baris terlihat jelek.;-)