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=1
ra khỏi điều kiện tham gia hoặc bạn sẽ không bao giờ nhận đượcsection_id
khác giá trị. - Nhóm theo
c.id
chỉ 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_id
giá trị cho danh mục tương ứng. Nếu truy vấn được nhóm theoc.id, ts1.section_id
thì 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í.;-)