我正在做一个项目,我需要检查用户是否喜欢这个帖子,然后在上面使用 COUNT()
,如果它给出 0 他们没有,如果它说 1 他们喜欢它
我试过使用这个查询
SELECT P.id AS id
, U.username AS username
, P.body AS body
, P.timestamp AS timestamp
, COUNT(L.user_id) AS likes
, COUNT(LD.post_id) AS liked
FROM posts AS P
LEFT JOIN users AS U ON U.id = P.user_id
LEFT JOIN followers AS F ON F.user_id = 'user1'
LEFT JOIN likes AS L ON L.post_id = P.id
LEFT JOIN likes AS LD ON LD.post_id = P.id
AND LD.user_id = 'user1'
WHERE F.following_id = P.user_id
OR P.user_id = 'user1'
GROUP BY P.id
我喜欢表中的条目是
UserId|PostId|timestamp
user1 |post1 |time
user2 |post1 |time
我的问题是它一直为 LD 计数提供 2,这是不可能的
*注意:在我的代码中,我通过 PDO 使用 :user
我实际上并没有像那样输入 id
编辑:
$sql = "SELECT P.id AS id, P.user_id AS userid, U.username AS username, U.name AS name, U.verified AS verified, P.body AS body, P.data AS data, P.timestamp AS timestamp, P.type AS type, P.users AS users, COUNT(L.user_id) AS likes, COUNT(DISTINCT LD.post_id) AS liked FROM posts AS P LEFT JOIN users AS U ON U.id = P.user_id LEFT JOIN followers AS F ON F.user_id = :userid LEFT JOIN likes AS L ON L.post_id = P.id LEFT JOIN likes AS LD ON LD.post_id = P.id AND LD.user_id = :userid WHERE F.following_id = P.user_id OR P.user_id = :userid GROUP BY P.id";
$results = DB::query($sql, array(':userid' => $user_id));
然后我循环遍历结果并将它们格式化为 json
最佳答案
你能试着添加一个DISTINCT吗? 喜欢
列的COUNT
函数上的关键字?
COUNT(DISTINCT LD.post_id) AS liked
连接很可能导致 likes
表被复制。因此,我们将仅计算使用 DISTINCT
的唯一帖子(按 post_id
)。
关于Mysql查询返回太多结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49726281/