如何先按新日期排序然后按过去日期排序?

How sort by new date first then by passed date?

我在 mysql 数据库中有日期列。我需要按日期对 ASC 进行排序,但首先显示尚未发生的日期,然后显示 发生的日期。如何执行 sql 语句?结果示例:

for date 25 October 2015
new by ASC:
2015-10-25
2015-10-27
2015-11-03
...
then old by DESC:
2015-10-24
2015-10-14
2015-09-10
...

ps 我正在使用 Yii2 框架(但干净 php 也不错)。

鉴于此示例数据:

CREATE TABLE t
    (`date` date)
;

INSERT INTO t
    (`date`)
VALUES
    ('2015-10-25'),
    ('2015-10-27'),
    ('2015-11-03'),
    ('2015-10-24'),
    ('2015-10-14'),
    ('2015-09-10')
;

和这个查询:

SELECT
date
FROM
t
ORDER BY
date >= CURDATE() DESC
, ABS(DATEDIFF(date, CURDATE()));

你得到你想要的输出:

|                        date |
|-----------------------------|
|   October, 25 2015 00:00:00 |
|   October, 27 2015 00:00:00 |
|  November, 03 2015 00:00:00 |
|   October, 24 2015 00:00:00 |
|   October, 14 2015 00:00:00 |
| September, 10 2015 00:00:00 |

看了fancyPants解决方案后觉得自己傻

但我想展示我正在使用的那个

SqlFiddleDemo

  SELECT *
  FROM (
        SELECT t.*,
               (@rn := if(true, @rn + 1, 1)
               ) as rn
        FROM myTable t         
        CROSS JOIN
              (select @rn := 0) params
        WHERE dateField >= NOW()
        ORDER BY dateField asc
      ) X
  UNION 
  SELECT *
  FROM (
        SELECT t.*,
                 (@bn := if(true, @bn + 1, 1)
                 ) as rn
        FROM myTable t         
        CROSS JOIN
              (select @bn := (SELECT COUNT(*) 
                              FROM myTable 
                              WHERE dateField >= NOW()
                             ) a
              ) params
        WHERE dateField < NOW()
        ORDER BY dateField desc
      ) Y 

输出

|                   dateField | rn |
|-----------------------------|----|
|   October, 25 2015 00:00:00 |  1 |
|   October, 27 2015 00:00:00 |  2 |
|  November, 03 2015 00:00:00 |  3 |
|   October, 24 2015 00:00:00 |  4 |
|   October, 14 2015 00:00:00 |  5 |
| September, 10 2015 00:00:00 |  6 |