php - MySQL 多向 ORDER BY

标签 php mysql time timestamp

我有一个表,其中包含“时间”列,用于存储时间戳。我想对其进行排序,以便如果时间戳是 future 的(即大于 PHP 的 time() 函数返回的值),它会按升序排序。如果不是 future ,则按值(value)递减顺序排列。

编辑: 假设我有这个时间戳列表(我知道它们不是实际的,但为了简单起见):

1896
779
468
1478
846
1384

然后假设当前时间戳是“1000”。该列表应由查询重新排序,如下所示:

1384
1478
1896
846
779
468

因此,实际上所有 1000 以上的数据都按 ASC 排序,所有低于 1000 的数据都按 DESC 排序。

最佳答案

您可以在ORDER BY中放置表达式:

 ORDER BY ts >= NOW() DESC, (ts >= NOW()) * ts ASC, ts DESC 

bool 条件在 MySQL 中返回为 0 或 1。

因此,所有 future 的时间戳都按 1 DESC, timestamp ASC, [timestamp DESC] 排序,过去的时间戳按 0 DESC, 0 ASC, timestamp DESC 排序,您获得所需的订单。

这可以避免重复谓词,但可能会影响性能。

关于php - MySQL 多向 ORDER BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32848061/

相关文章:

php - 使用 MySQL 数据库处理 PHP Symfony 中的队列竞争条件

php - 想要将上传的 csv 文件插入数据库。它说 'no database selected' 我错过了什么?

mysql - Rails 4 MySQL bigInt 主键问题和错误

php - 用PHP输出一个负的MySQL时间值

php - 如何调试(看似)有问题的 SwiftMailer 附件?

php - 对同一字段进行散列和加密会削弱它吗?

php - 条件INSERT mysql查询错误

mysql - 在 DCHQ 上找不到节点 [AppServer] 所需内存最少的匹配服务器

JavaScript Date() 行为异常,知道哪里出了问题吗?

java - 将非 ISO 8601 解析为 ISO_INSTANT