我有一個帖子(新聞)表,但他們可以有不同的日期屬性,其中一些可能未設置(0)。我想在所有字段上訂購DESC,然後在尊重時間順序的情況下得到結果,而不是我在查詢中給出的順序。如何按多個時間戳字段排序並按時間順序返回?
title | pubdate | startdate | enddate | closedate |
------------------------------------------------------------
exm1 | 1271887200 | 0 | 0 | 0 |
exm2 | 1291071600 | 0 | 0 | 0 |
exm3 | 0 | 1496102400 | 1496361600 | 0 |
exm4 | 1496620800 | 0 | 0 | 0 |
exm5 | 0 | 1501545600 | 1501891200 | 1496966400 |
exm6 | 0 | 1493856000 | 1496361600 | 0 |
相關字段爲「pubdate」,「startdate」或「closedate」。所以我所做的就是簡單地把他們變成我的ORDER BY語句:
SELECT * FROM news ORDER BY closedate DESC, startdate DESC, pubdate DESC
當然這樣的作品,但我注意到,這始終把行與「closedate」到結果的前面,其次是「開始日期」結果等等。而排序只發生在切片內,而不是所有的值。他們被對待像一個不同的集合,縫合在一起。
因此,結果是:exm5,exm3,exm6,exm4,EXM2,EXM1
,但我想以下幾點:exm5,exm4,exm3,exm6,EXM2,EXM1
原因:
- exm5 close is 06.09.2017 (and pub is 0)
- exm4 pub is 06.05.2017 (and close is 0 and enddate is 0)
- exm3 start is 05.30.2017 (and close is 0 and pub is 0)
- exm6 start is 05.04.2017 (and close is 0 and pub is 0)
我可以通過代碼應用此排序,但我想使用此查詢的LIMIT和偏移量,維護分頁順序。
我覺得我不知何故必須合併這些值和排序在一個單一的領域,但我不知道如何做到這一點,或者如果它甚至可能只與MYSQL。
任何想法?謝謝。
聽起來很有希望!是的,我確實有DEFAULT'0'幸運地 – m3nt0r
我試過了,但問題是如果設置了closedate,它會優先於startdate(將來的日期)。最好會返回startdate並忽略closedate,因爲它始終更低。編輯:看到「exm5」 – m3nt0r
那裏的精彩解決方案。使用CASE編輯的版本解決了我所有的問題。謝謝! – m3nt0r