câu trả lời của @ VoteyDisciple đang đi đúng hướng, nhưng truy vấn của anh ấy cần một số cải tiến:
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;
Giải thích:
-
IF()biểu thức là dư thừa vì đẳng thức đã trả về 1 hoặc 0. - Lấy
ts1.section_id=1ra khỏi điều kiện tham gia hoặc bạn sẽ không bao giờ nhận đượcsection_idkhác giá trị. - Nhóm theo
c.idchỉ có. Tôi giả sử OP chỉ muốn một hàng cho mỗi danh mục và các cột cho số lượng của mỗisection_idgiá trị cho danh mục tương ứng. Nếu truy vấn được nhóm theoc.id, ts1.section_idthì sẽ có tối đa bốn hàng cho mỗi danh mục. - Di chuyển dấu phẩy trong danh sách chọn. Dấu phẩy nổi ở đầu dòng trông xấu xí.;-)