我正在开展一个项目,我需要检查用户是否喜欢这个帖子,然后在其上使用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
我的问题是它一直给出一个2的LD计数,这是不可能的
*注意:在我的代码中,我通过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
答案 0 :(得分:1)
您可以尝试在liked
列的COUNT(DISTINCT LD.post_id) AS liked
函数中添加DISTINCT关键字吗?
likes
联接最有可能导致post_id
表重复。因此,我们只会使用DISTINCT
计算唯一帖子({{1}})。