繁体   English   中英

有没有办法改进此 SQL 查询以按特定顺序检索数据?

[英]Is there a way to improve this SQL query to retrive data in a certain order?

我有一个包含以下 2 个表的数据库

帖子:

|post_id| text |post_date(time_stamp)|

喜欢:

| like_id | likee (1 or -1) | post_id | like_date (time_stamp) |

我正在尝试恢复过去一小时内喜欢的所有帖子,并按照过去一小时内收到的喜欢数量对它们进行排序。

我尝试了以下查询,该查询返回了过去一小时内喜欢的所有帖子,但我无法弄清楚如何按每个 post_id 的喜欢总数排序。

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()创建一个常量,这样您就可以使用索引。

现在你加入你的帖子,总喜欢

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
SELECT * FROM posts
INNER JOIN likes ON posts.post_id = likes.post_id
WHERE TIMESTAMPDIFF(HOUR,like_time,NOW())< 1 AND likee= 1
ORDER BY likee DESC

您可以使用ORDER BY语句执行此操作。 @Mysql 基础

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM