mysql - sql 脚本中的奇怪错误

标签 mysql sql

SELECT p.*, u.user_id, u.user_name, 
       COUNT(c.comment_id) AS count, 
       COUNT(v.vote_post_id) / 
         (TIMESTAMPDIFF(MINUTE, v.vote_timestamp, SYSDATE()) + 1) AS rate
FROM posts AS p 
LEFT JOIN comments AS c ON (p.post_id = c.comment_post_id)
LEFT JOIN post_votes AS v ON (p.post_id = v.vote_post_id)
LEFT JOIN users AS u ON (p.postedby_id = u.user_id) 
GROUP BY p.post_id 
ORDER BY COUNT(v.vote_post_id) / 
     (TIMESTAMPDIFF(MINUTE, v.vote_timestamp, SYSDATE()) + 1) DESC

这是我正在编写的脚本。我没有很好地填充我的数据库来进行测试,但前两个结果会因评论而加倍。你能在这里看到任何明显的错误吗?我有另一个版本的脚本在这里运行良好:

SELECT p.*, u.user_id, u.user_name, 
       COUNT(c.comment_id) AS count
    FROM posts AS p 
    LEFT JOIN comments AS c ON (p.post_id = c.comment_post_id) 
    LEFT JOIN users AS u ON (p.postedby_id = u.user_id) 
    GROUP BY p.post_id 
    ORDER BY COUNT(c.comment_post_id) / 
       (TIMESTAMPDIFF(MINUTE, p.post_timestamp, SYSDATE()) + 1) DESC

最佳答案

多次投票会导致您的评论重复。如果您对 vote_post_id 进行GROUP BY,则希望对 post_votes 表进行子选择,以将每个帖子的总票数作为单个值获取.

由于 COUNT 是保留字,因此我不建议将其用作结果集中的列名称。

如果您只是获取评论计数而不是评论本身,那么您也会希望将其包含在子选择中,否则您将在帖子上加倍。

SELECT p.*, u.user_id, u.user_name, c.comment_count, 
    v.vote_count AS total_votes, 
    v.vote_count / (TIMESTAMPDIFF(MINUTE, p.post_timestamp, SYSDATE()) + 1) as votes_per_minute
FROM posts AS p 
LEFT JOIN (SELECT comment_post_id, COUNT(comment_post_id) AS comment_count FROM comments GROUP BY comment_post_id) AS c ON (p.post_id = c.comment_post_id)
LEFT JOIN (SELECT vote_post_id, COUNT(vote_post_id) AS vote_count FROM post_votes GROUP BY vote_post_id) AS v ON (p.post_id = v.vote_post_id)
LEFT JOIN users AS u ON (p.postedby_id = u.user_id) GROUP BY p.post_id 
ORDER BY v.vote_count / (TIMESTAMPDIFF(MINUTE, p.post_timestamp, SYSDATE()) + 1) DESC

关于mysql - sql 脚本中的奇怪错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29674763/

相关文章:

mysql - LEFT JOIN 运行速度非常慢,但嵌套 select 却不会

sql - 是否可以在事务内(在 SQL Server 内)运行多个 DDL 语句?

mysql - 带通配符的 DISTINCT/GROUP BY。数据库

c# - MySQL 返回列名而不是它们的内容

mysql - 让mysql回答表中有多少个名字

php - hasmany 表中的 Laravel Dropzonejs 文件验证

php - 这个可以用SQL注入(inject)吗?

sql - PostgreSQL - 显示上年+当年周数据

sql - SQL Server 中计算列的排序依据

mysql - 使用索引对 MYSQL 进行计数查询优化