如何以某种方式对这些SQL结果进行排序?
问题:如何以某种方式对这些SQL结果进行排序? 我正在制作一种活动日历应用程序。用户主页上显示了两种类型的事件: 附近活动 - 预定日期在未来 3 天内或过去 1 小时内的活动。 正常事件 - 没有计划日期或计划日期在未来 3 天之后的事件。 这是事件表:id, user_id, content, occurs_at, created_at 目前,我按创建日期排序显示这些事件,以首先显示新添加的内
·
问题:如何以某种方式对这些SQL结果进行排序?
我正在制作一种活动日历应用程序。用户主页上显示了两种类型的事件:
-
附近活动 - 预定日期在未来 3 天内或过去 1 小时内的活动。
-
正常事件 - 没有计划日期或计划日期在未来 3 天之后的事件。
这是事件表:id, user_id, content, occurs_at, created_at
目前,我按创建日期排序显示这些事件,以首先显示新添加的内容。
我想要的是首先显示所有附近的事件并按计划日期排序,然后显示正常事件并按创建日期排序。我认为它可以提供更好的用户体验,但我不知道如何去做。
更新
结束了这个查询,这是几个答案的组合。
ORDER BY COALESCE(occurs_at > :min_time AND occurs_at < :max_time, 0) DESC, occurs_at ASC, created_at DESC
解答
order by
子句可以包含任意逻辑,而不仅仅是字段名称,因此,在伪代码中,您可以
SELECT ...
...
ORDER BY (date_diff(occurs_at, now) <= '3 days'), occurs_at DESC, created_at DESC
第一个子句将接下来 3 天内发生的所有事件强制排在列表顶部。然后第二个子句按降序排序,然后其他所有内容都按 created_at 日期排序。
更多推荐
已为社区贡献19912条内容
所有评论(0)