Mysql查询返回太多结果

时间:2018-04-09 05:44:40

标签: mysql sql

我正在开展一个项目,我需要检查用户是否喜欢这个帖子,然后在其上使用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

1 个答案:

答案 0 :(得分:1)

您可以尝试在liked列的COUNT(DISTINCT LD.post_id) AS liked 函数中添加DISTINCT关键字吗?

likes

联接最有可能导致post_id表重复。因此,我们只会使用DISTINCT计算唯一帖子({{1}})。