Anda perlu menambahkan semua kolom yang Anda pilih di SELECT
klausa kecuali c.USER_ID
ke GROUP BY
klausa, seperti ini:
group by c.ID, c.otherfields, l.title,..
EDIT: Saya pikir yang berikut ini akan berfungsi dengan baik:
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
Contoh: Jika Anda memiliki contoh data berikut:
-
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
Kasus 1:pengguna Mahmoud
ditampilkan dua kali:
Kemudian, kueri sebelumnya akan memberi Anda jumlah komentar untuk setiap Pengguna dan juga untuk setiap item, seperti ini:
total_commments_user ID ITEM_ID USER_ID Name
3 4 1 8 Mahmoud
2 7 2 8 Mahmoud
2 9 1 9 Ahmed
Perhatikan bahwa pengguna Mahmoud
ditampilkan dua kali dengan hitungan yang berbeda, karena ia memiliki Item_Id
yang berbeda .
Kasus 2:pengguna Mahmoud
hanya ditampilkan satu kali:
Jika Anda ingin mendapatkan jumlah komentar untuk setiap pengguna untuk semua item, maka Anda hanya perlu mengelompokkan berdasarkan USER_ID
dan Anda akan mendapatkan:
total_commments_user ID ITEM_ID USER_ID Name
5 4 1 8 Mahmoud
3 9 1 9 Ahmed
Seperti yang Anda lihat sekarang, pengguna Mahmoud
ditampilkan hanya satu kali, karena kita menggunakan Item_Id
.
Anda kemudian dapat memfilter berdasarkan status atau apa pun.