2014-05-18 44 views
0

在排序MySQL中日期的ORDER BY時,我試圖在今天之後的日期對ASC進行排序,而對於今天之前的日期,我嘗試對ASC進行排序。按照IF和排序日期排序的MySQL

我在做類似的東西:

SELECT * FROM test ORDER BY IF(created >= NOW(), created, 1) ASC, created DESC 

這讓我有點期望的結果:

ID CREATED 
8 May, 10 2014 11:15:00+0000 
7 May, 03 2014 20:47:00+0000 
5 May, 02 2014 14:00:00+0000 
4 April, 30 2014 17:41:00+0000 
3 April, 30 2014 17:00:00+0000 
1 April, 21 2014 03:30:00+0000 
6 March, 23 2014 12:00:00+0000 
9 May, 20 2014 20:45:00+0000 
10 July, 02 2014 20:30:00+0000 
2 June, 30 2015 11:16:00+0000 

今天之前是DESC,今天之後ASC。但是,我想在結果頂部看到ID爲9,10,2的塊。

任何想法如何做到這一點表示讚賞。

測試鏈接:http://www.sqlfiddle.com/#!2/4667b/2/0

+0

是否有任何特定的邏輯背後9,10,2頂部,因爲他們是今天之後。 –

+0

只爲了訂購。這是爲了事件。我想要顯示什麼是提前而不是後來,但也顯示從最近傳遞到最古老的順序。 – maximo

回答

1

添加一個附加條件的order by,這是該日期是否在過去或未來的二進制指標:

SELECT * 
FROM test 
ORDER BY (created >= NOW()) desc, 
     IF(created >= NOW(), created, NULL) ASC, 
     created DESC; 
+0

謝謝戈登!這個伎倆。 – maximo

0

如何分割它分成2 SQL查詢,然後結合結果?

(SELECT * FROM test WHERE created >= NOW() ORDER BY created ASC) 
UNION 
(SELECT * FROM test WHERE created < NOW() ORDER BY created DESC) 
+0

來自'union'的結果沒有按照子查詢中的順序進行。 「all all」的結果似乎是,但沒有保證。 –