gpt4 book ai didi

mysql - 忽略第二个条件进行排序

转载 作者:行者123 更新时间:2023-11-29 13:40:52 26 4
gpt4 key购买 nike

我的查询遇到问题,基本上我在这里尝试做的是先按

订购

item_info.content_time desc

然后通过

item_views.views desc

我的目的是获取最新的项目(按 item_info.content_time desc 排序),以及最多的浏览次数(item_views.views desc)。本质上就像 stackoverflow 主页一样,在那里你有最新的、最多的浏览量(我真的不知道他们是不是这样做的)。以下查询要么按一个条件对项目进行排序,要么按另一个条件对项目进行排序(如果我按条件反转顺序)。这是我的代码:

SELECT item_info.item_id, item_info.profile_id, item_info.tittle, item_covers.reference, usuarios.username, item_views.views
FROM item_info
LEFT JOIN item_covers ON item_covers.cover_id = item_info.book_id
LEFT JOIN usuarios ON item_info.profile_id = usuarios.id
LEFT JOIN item_views ON item_views.id = item_info.book_id
WHERE item_info.content_time
BETWEEN UNIX_TIMESTAMP( CURDATE( ) + INTERVAL -1
DAY )
AND UNIX_TIMESTAMP( CURDATE( ) + INTERVAL 1
DAY )
order by item_info.content_time desc, item_views.views desc

大概是这样的......

预期输出:

内容时间 |观点

17:00                      500
13:00                      300
11:00                      100
10:00                      50

实际输出:

内容时间 |观点

17:00                      500
16:00                      10
15:00                      30
14:00                      50

最佳答案

如果您想要两者的组合,您应该创建一个由两者的组合(可能通过额外因素加权)总和组成的列,例如 DATEDIFF(content_time,NOW())+views。通过使用 DATEDIFF,您将确保 content_time 是数字类型并且可以添加到 views 中。通过按所示顺序使用 DATEDIFF() 和参数,您将获得过去任何 content_time 的负数,这将减少 的组合值相应地查看

所以你的查询应该以这样的方式结束

..
...
ORDER BY DATEDIFF(viewsitem_info.content_time,NOW())+viewsitem_info.views desc

DATEDIFF() 给出以天为单位的差异。也许您想要更精确一点。在这种情况下,您可能需要使用 TIMESTAMPDIFF(MINUTE,viewsitem_info.content_time,NOW()) 来代替。

@Aaron:您根本不必更改数据结构。如有必要,您应该引入某种权重因子,例如

ORDER BY 
(0.123* TIMESTAMPDIFF(MINUTE,viewsitem_info.content_time,NOW())
+ viewsitem_info.view) DESC

关于mysql - 忽略第二个条件进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18095214/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com