2012-09-20 63 views
3

我有一個訂單MySQL的多個順序設置

ORDER BY FIND_IN_SET(status, '1,5,3,4,2'), end_date ASC 

但我想是狀態1中的任何記錄的查詢被定購END_DATE ASC和END_DATE DESC訂購的狀態2和訂購的人end_date ASC。

可以這樣做嗎?謝謝

回答

2

嘗試此查詢 -

SELECT * FROM table_name 
    ORDER BY 
    IF(status < 2, status, 3), 
    IF(status = 2, TO_DAYS(end_date) * -1, TO_DAYS(end_date)) 
0

使用2個查詢來獲得您的不同種類,然後獲得聯合查詢。

SELECT * FROM (
(SELECT * FROM table WHERE status!=2 
ORDER BY FIND_IN_SET(status, '1,5,3,4'), end_date ASC) 
UNION 
(SELECT * FROM table WHERE status=2 ORDER BY end_date DESC) 
) AS table_sort ORDER BY FIND_IN_SET(status, '1,5,3,4,2') 

既然你想要的狀態2個記錄最後,在技術上你不會需要選擇在UNION和ORDER,但我補充說,如果你想要一個不同的排序順序。

+0

我會給一個走了不久。我以前有2個單獨的查詢,但我已經添加了分頁,因此需要它們是單個查詢字符串。謝謝 – puks1978

1

煉油Devart的答案...

SELECT * FROM table_name 
    ORDER BY find_in_set(status, '1,5,3,4,2') 
    CASE 
    WHEN (status = 2) then TO_DAYS(end_date) * -1 
    ELSE TO_DAYS(end_date) 
    END