问题:如何以某种方式对这些SQL结果进行排序?

我正在制作一种活动日历应用程序。用户主页上显示了两种类型的事件:

  1. 附近活动 - 预定日期在未来 3 天内或过去 1 小时内的活动。

  2. 正常事件 - 没有计划日期或计划日期在未来 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 日期排序。

Logo

PostgreSQL社区为您提供最前沿的新闻资讯和知识内容

更多推荐