有一个简单的数据表,用于存储带有日期字段的新闻和事件(此字段上的手动输入)。只是有一个简单的标志来告诉什么是新闻文章和什么是事件。
我需要做的是按日期降序获取新闻,以便首先显示最新消息,但我希望按升序排列事件,以便首先显示最旧的,所有数据应列为一个列表混合的新闻/事件,但以正确的日期顺序列出,以便将记录混合在一起
=====================================
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
不是最好的例子,但希望足以给你一个想法。不确定这是否可能。
答案 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 |