Bạn đang thực hiện THAM GIA BÊN TRONG, nhưng bạn cần THAM GIA NGOÀI TRỜI, cụ thể là THAM GIA TRÁI. Với THAM GIA TRÁI, bảng "ở bên trái" luôn được tham gia và nếu không có sự tương ứng, các trường của bảng bên phải sẽ được đặt thành rỗng. Sự khác biệt được giải thích rất rõ trong trang wikipedia này .
Sau đó, bạn phải nhóm các hàng có cùng id gửi và đếm số lượng hàng đã được nhóm lại, lưu ý rằng nếu một bài gửi chỉ có một nhận xét và một bài khác không có thì cả hai đều có 1 hàng được nhóm ... Nếu một lần gửi không có nhận xét , trong truy vấn tiếp theo c.submissionid
sẽ là null, vì vậy
SQL của bạn có thể là
SELECT s.loginid, s.title, s.url, s.displayurl, l.username, c.submissionid,
IF(c.submissionid IS NULL, 0, COUNT(*)) AS countComments
FROM submission AS s
INNER JOIN login AS l ON l.loginid = s.loginid
LEFT JOIN comments AS c ON c.submissionid = s.id
GROUP BY (s.id)
ORDER BY s.datesubmitted DESC
LIMIT 10
Có thể có lỗi, tôi chưa kiểm tra truy vấn ... Nhưng tôi hy vọng đã cung cấp cho bạn ý tưởng đúng, đó là sự khác biệt giữa các phép nối ngoài và phép nối bên trong.