Mysql 不同的排序顺序


Mysql different sort orders

有一个简单的数据表,该表使用日期字段存储新闻和事件(在此字段上手动输入)。只是有一个简单的标志来告诉什么是新闻文章,什么是事件。

我需要以某种方式按日期降序获取新闻,以便首先显示最新新闻,但

我希望事件按升序排列,以便首先显示最旧的,所有数据都应列为新闻/事件混合的一个列表,但以正确的日期顺序列出,以便记录将混合在一起

=====================================
Title          | Date         | Type
=====================================
News 1         | 2016/01/18   | N
News 2         | 2016/01/23   | N
Event 1        | 2016/01/25   | E
Event 2        | 2016/02/21   | E

需要输出如下的数据:

=====================================
Title          | Date         | Type
=====================================
News 2         | 2016/01/23   | N
Event 2        | 2016/01/21   | E
Event 1        | 2016/01/25   | E
News 1         | 2016/01/18   | N

不是最好的例子,但希望足以给你一个想法。 不确定这是否可能。

我不确定如何重新创建您的预期结果,因为"今天"可能会有所不同。我所能建议的是你需要一个计算,也许基于 curdate(),以便将来的日期在排序中受到"惩罚"。例如,这个带有curdate()的SQL小提琴符文= March 02 2016 00:00:00

MySQL 5.6 架构设置

CREATE TABLE Table1
    (`Title` varchar(7), `Date` datetime, `Type` varchar(1))
;
INSERT INTO Table1
    (`Title`, `Date`, `Type`)
VALUES
    ('Event 1', '2016-01-25 00:00:00', 'E'),
    ('Event 2', '2016-02-21 00:00:00', 'E'),
    ('News 1', '2016-01-18 00:00:00', 'N'),
    ('News 2', '2016-01-23 00:00:00', 'N')
;

查询 1

select
      (case when `Date` > curdate() then `Date`-curdate() else curdate() - `Date` end) as scale
    , `Date`
    , `Title`
    , `Type`
from table1
order by scale

结果

|           scale |                       Date |   Title | Type |
|-----------------|----------------------------|---------|------|
| -20160200839698 | February, 21 2016 00:00:00 | Event 2 |    E |
| -20160104839698 |  January, 25 2016 00:00:00 | Event 1 |    E |
| -20160102839698 |  January, 23 2016 00:00:00 |  News 2 |    N |
| -20160097839698 |  January, 18 2016 00:00:00 |  News 1 |    N |