Mysql查询返回太多结果

标签 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

我的问题是它一直为 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/

相关文章:

mysql - 总之,用例将传入值与另一列进行比较(MYSQL)

sql - 如何从一个表中获取结果,其中另一个表的 ID 不在一个表中

mysql - 将多行 MySQL 行转换为多列和单行

sql - 将 NULL 数组填充到自定义聚合函数的最大长度

mysql - 加载文件中的数据导入不起作用,其他主题均无帮助

MySQL:唯一索引不符合 `null` 值

sql - 如何在PL/SQL开发人员的网格输出中设置numwidth?

mysql - 加入来自同一个表的三个查询

php - 在每个 php 页面的顶部包含 require ("db.php") 是否会减慢速度?

php - MYSQL 查询 - 获取并检查 2 个表中的数据