我有一个包含以下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
我可以通过修改查询来实现它吗?
答案 0 :(得分:2)
首先计算最后一个小时的喜欢(或正面喜欢):
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
答案 1 :(得分:-1)
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 basics