Bạn cần thêm tất cả các cột bạn đang chọn trong SELECT
ngoại trừ mệnh đề c.USER_ID
vào GROUP BY
mệnh đề như sau:
group by c.ID, c.otherfields, l.title,..
CHỈNH SỬA: Tôi nghĩ những điều sau sẽ hoạt động bình thường:
SELECT count(c.USER_ID) as total_commments_user ,
c.*, u.NAME, l.TITLE as LINK_TITLE, u.AUTH_IMG
FROM `PLD_COMMENT` c
left outer join `PLD_USER` u ON (u.ID = c.USER_ID)
left outer join `PLD_LINK` l ON (l.ID = c.ITEM_ID)
group by c.ITEM_ID, c.USER_ID
ORDER BY c.USER_ID, l.ID
Ví dụ: Nếu bạn có dữ liệu mẫu sau:
-
PLD_LINK:
ID STATUS TITLE 1 1 title1 2 2 title2
-
PLD_USER:
ID NAME 8 Mahmoud 9 Ahmed
-
PLD_COMMENT:
ID ITEM_ID USER_ID STATUS 4 1 8 1 5 1 8 1 6 1 8 1 7 2 8 2 8 2 8 2 9 1 9 1 10 1 9 1
Trường hợp 1:người dùng Mahmoud
được hiển thị hai lần:
Sau đó, truy vấn trước đó sẽ cung cấp cho bạn số lượng nhận xét cho từng Người dùng và cho từng mục, như sau:
total_commments_user ID ITEM_ID USER_ID Name
3 4 1 8 Mahmoud
2 7 2 8 Mahmoud
2 9 1 9 Ahmed
Lưu ý rằng người dùng Mahmoud
được hiển thị hai lần với một số lượng khác nhau, vì anh ta có Item_Id
khác .
Trường hợp 2:người dùng Mahmoud
chỉ được phát một lần:
Nếu bạn muốn nhận được số lượng nhận xét của mỗi người dùng cho tất cả các mục thì bạn sẽ chỉ cần nhóm theo USER_ID
và bạn sẽ có:
total_commments_user ID ITEM_ID USER_ID Name
5 4 1 8 Mahmoud
3 9 1 9 Ahmed
Như bạn có thể thấy bây giờ, người dùng Mahmoud
chỉ được hiển thị một lần, vì chúng tôi đã nhập Item_Id
.
Sau đó, bạn có thể lọc theo trạng thái hoặc những gì đã từng.