私はFacebookのようなソーシャルメディアを作成していて、次のクエリを使用して投稿のいいねの数を取得しようとしています。
SELECT posts.object_ID, posts.user_ID, posts.datetime, posts.text,
COUNT(likes.object_ID) AS likes,
SUM(IF(likes.user_ID=?, 1, 0)) AS allowLike, users.first_name,
users.last_name, userinfo.image_ID
FROM posts
LEFT JOIN users ON users.ID=posts.user_ID
LEFT JOIN friends ON (friends.user_ID_1=? OR friends.user_ID_2=?)
AND friends.approved=1
LEFT JOIN userinfo ON users.ID=userinfo.user_ID
LEFT JOIN likes ON likes.object_ID=posts.object_ID
WHERE ". $str ."
GROUP BY posts.object_ID
ORDER BY posts.datetime DESC
LIMIT 0,30
の値は$str
、友達やものを除外するための単なるメカニズムです。例:
$str = "(posts.user_ID=friends.user_ID_1 OR posts.user_ID=friends.user_ID_2) OR posts.user_ID=? ";
今何が起こっているのかというと、COUNT(likes.object_ID)
4をSUM(IF(likes.user_ID=?, 1, 0))
返し、4も返します。
これは、驚くべきことに、実際のいいねの数に私が持っている友達の数(4)を掛けたものです。これは、2つのいいねの投稿が8つのいいねとして表示されるためです。昨日は3人の友達がいて、3人で表示されました。これは、投稿が自分のものである場合にのみ発生します。
コメントを取得するために非常によく似たクエリを使用しますが、そこでは何も奇妙なことは起こっていません。
何か案は?
編集:それは私自身の投稿だけに限定されていません。私はそれが他の誰かの投稿にあるケースを見つけました。それでも、それはすべての投稿に起こっているわけではありません...それは奇妙です。また、それは私自身の好きなものに縛られていません...
EDIT2:EDIT1で話していた投稿を「いいね」すると、1つとして表示され、2、3回更新した後も、1のように表示されました。変..