我有一个数据库,有以下两个表
帖子

|post_id| text |post_date(time_stamp)|

喜欢:
| like_id | likee (1 or -1) | post_id | like_date (time_stamp) |

我正在尝试恢复所有在过去一个小时内喜欢的帖子,并按在过去一个小时内收到多少喜欢的帖子排序。
我尝试了以下查询,该查询返回了过去一小时内所有受欢迎的帖子,但我还无法确定如何按每个帖子ID的likee总和排序。
SELECT * FROM posts
  INNER JOIN likes ON posts.post_id = likes.post_id
  WHERE TIMESTAMPDIFF(HOUR,like_time,NOW())< 1 AND likee= 1

有什么方法可以通过修改查询来实现它吗?

最佳答案

首先计算最后一小时的喜欢(或积极的喜欢):

 SELECT post_id,
        SUM( likee ) as total_likes,
        SUM( CASE WHEN likee = 1 THEN 1 ELSE 0 END ) as total_positive_likes
 FROM likes
 WHERE like_date >= DATE_SUB(NOW(),INTERVAL 1 HOUR)
 GROUP BY post_id;

注意,您没有更改字段like_date,而是从NOW()创建一个常量,这样就可以使用index。
现在你加入了你的帖子
SELECT p.*, l.total_likes
FROM Post p
JOIN ( SELECT post_id,
              SUM( likee ) as total_likes,
              SUM( CASE WHEN likee = 1 THEN 1 ELSE 0 END ) as total_positive_likes
       FROM likes
       WHERE like_date >= DATE_SUB(NOW(),INTERVAL 1 HOUR)
       GROUP BY post_id
    ) L
  ON p.post_id = l.post_id
ORDER BY l.total_likes DESC

10-02 08:44