Mysql不同的排序顺序

时间:2016-03-01 09:31:23

标签: php mysql

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

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

=====================================
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

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

1 个答案:

答案 0 :(得分:0)

我不确定如何重现您的预期结果#34;今天"可能会有所不同。我所能提出的就是你需要一个计算,也许是基于curdate(),以便将来的日期是"惩罚"在排序中。例如,此SQL Fiddle符文与curdate()= 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

<强> Results

|           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 |