SQL查询显示错误的结果

时间:2018-12-24 06:30:31

标签: mysql sql mysqli

我在mysql中有tabe,我想根据created_on(时间戳)通过user_id获得最多的赞 如果有多个记录,则应显示最早的发布结果。这是我的表“ post_likes”

id      post_id         likes       created_on
1       91              1           1545311881
2       82              1           1545201971
3       84              1           1545160544
4       91              1           1545146273
5       84              1           1545123998

我尝试了以下查询,但对我不起作用

select post_id, count(likes) 
from post_likes 
group by post_id 
ORDER BY created_on ASC LIMIT 1

显示我最老但有1个赞,我想获得最大+最老的帖子结果。

2 个答案:

答案 0 :(得分:0)

尝试:

SELECT post_id, count(likes), created_on
FROM
(
    SELECT * FROM post_likes Order by created_on
) as t1
group by post_id ORDER BY count(1) desc
LIMIT 1

注意:如果您想要post_id:91的最早时间戳,则必须在分组依据之前按asc中的时间戳排序。否则时间戳会给您不确定的结果。

答案 1 :(得分:0)

对于每个帖子,您需要生成COUNT(likes)来查看它总共有多少赞,并且还需要MIN(created_on)找出该帖子最早的赞日期。完成后,您可以按喜欢和创建日期进行排序:

SELECT post_id, COUNT(likes) AS likes, MIN(created_on) AS created_on
FROM post_likes
GROUP BY post_id
ORDER BY likes DESC, created_on ASC
LIMIT 1

输出:

post_id     likes   created_on
84          2       1545123998

Demo on dbfiddle

更新:要仅查看过去24小时内的帖子喜欢,您需要首先使用子查询过滤表格,该子查询仅选择过去24小时内喜欢的帖子({{1} }:

created_on > UNIX_TIMESTAMP() - 24 * 60 * 60)

注意-对于您的示例数据,没有帖子符合此条件。如果您将条件扩展到更长的天数,此demo会为您提供结果。