具有 2 个计数和连接的 php 查询

标签 php mysql

我正在运行一个使用 3 个选项卡“帖子、点赞和评论”的查询,我需要获取该帖子获得的点赞和评论数量,同时从帖子表中获取基本信息,因此我使用查询如下,但问题是,如果 Likes 较大,除非 comments 为 0,否则它会将 likeAmount 的值复制到 commentAmount。

SELECT post.*, COUNT(likes.id) as 'LikeAmount', COUNT(comment.id) as 'commentAmount' FROM post 
  LEFT JOIN likes ON post.id = likes.post
  LEFT JOIN comment ON post.id = comment.post
  GROUP BY post.id 
  ORDER BY LikeAmount DESC"

所以这不起作用,但是当我添加不同时它确实起作用,所以当它像这样时:.

SELECT post.*, COUNT(distinct likes.id) as 'LikeAmount', COUNT(distinct comment.id) as 'commentAmount' FROM post 
LEFT JOIN likes ON post.id = likes.post
LEFT JOIN comment ON post.id = comment.post
GROUP BY post.id 
ORDER BY LikeAmount DESC";

我不明白为什么它与distinct一起工作而不能与out一起使用,并且distinct的数学性能是否明智,或者它是否没有区别,因为它将用于具有大量流量的网站..

最佳答案

试试这个,不短,但可读:

SELECT
    p.*,
    pl.like_count,
    pc.comment_count
FROM post p

#join likes
LEFT OUTER JOIN (
    SELECT
        post,
        COUNT(*) AS like_count
    FROM likes
    GROUP BY post
) AS pl
    ON pl.post = p.id

#join comments
LEFT OUTER JOIN (
    SELECT
        post,
        COUNT(*) AS comment_count
    FROM comment
    GROUP BY post
) AS pc
    ON pc.post = p.id

关于具有 2 个计数和连接的 php 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9362615/

相关文章:

javascript - 将用户输入的 url 与 php 变量中的 url 进行匹配

php - 双重复 key 更新输入错误

Mysql减法性能低下

php - 如何从一个表单向两个表中插入数据?

php - 锁定 SQL 表,然后执行事务,以根据选择值插入条件

php - 在主机 000webhost.com 上时出现 ' 字符的 mysql 错误

javascript - 使用 md5.js 的客户端密码加密和 PHP 解密

php ffmpeg 获取视频时长

mysql - 如何更改外键的操作

php - 在PHP中如何处理MySQL的外键错误?