我有一个表,其中包含“时间”列,用于存储时间戳。我想对其进行排序,以便如果时间戳是 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/