2017-06-07 103 views
1

我想優先考慮狀態部分。所有不被支持的東西都應該首先出現。無論日期。但現在,它會在日期之後訂購任何東西。我如何優先處理第一個案件'不支持的部分'?列表的其餘部分應該在日期之後出現。在mysql中優先考慮case

SELECT * FROM list 
     ORDER BY date DESC, 
CASE 
     WHEN `bookings`.`status` = 'Not repported' THEN 1 
     WHEN day= 'Monday' THEN 2 
     WHEN day= 'Tuesday' THEN 3 
     WHEN day= 'Wednesday' THEN 4 
     WHEN day= 'Thursdau' THEN 5 
     WHEN day= 'Friday' THEN 6 
     WHEN day= 'Saturday' THEN 7 WHEN 
     day= 'Sunday' THEN 8 END ASC 
     limit 1,20 "; 

我想要這樣的東西。

------------------------------ 
DATE----DAY-------STATUS------ 
2011---Monday-----Not reported 
2015---Sunday-----Not reported 
2010---Wednedday--Not reported 
2016---Monday---------Reported 
2015---Monday---------Reported 
2014---Tuesday--------Reported 
2013---Sunday---------Reported 
------------------------------ 
+0

作爲一個說明,像這樣的字面名稱存儲天是非常混亂。將它們存儲爲像1..7這樣的值可以更好地與['DAYOFWEEK()'](https://dev.mysql.com/doc/refman/5.5/en/date-和時間functions.html#function_dayofweek)。一個很好的例子是爲什麼不這樣做是因爲你的代碼無法處理週四完成的任何事情,並且追蹤這個錯誤可能是一個徹底的挫敗。 – tadman

+0

謝謝。但是,它並沒有幫助我優先考慮沒有得到支持的部分。 –

+1

您可能想要發佈預期的輸出,而不是推測 – maSTAShuFu

回答

1

通過 像這樣的事情

SELECT * FROM list 
     ORDER BY 
CASE 
     WHEN `bookings`.`status` = 'Not repported' THEN 1 ELSE 2 
END, 

CASE 
     WHEN day= 'Monday' THEN 2 
     WHEN day= 'Tuesday' THEN 3 
     WHEN day= 'Wednesday' THEN 4 
     WHEN day= 'Thursdau' THEN 5 
     WHEN day= 'Friday' THEN 6 
     WHEN day= 'Saturday' THEN 7 WHEN 
     day= 'Sunday' THEN 8 END ASC, 

date DESC 
     limit 1,20 "; 

更改爲了這會給你這樣的結果

'不repported',2017年1月1日

'不repported',2017年3月7日

'不repported',15/8/2017

星期一,6/2/2017

2017年1月11日星期一

+0

它縮小了日期。它並沒有提升所有'未報告'的行到列表的開頭。 –

+1

看看編輯 – asmgx

2

您有兩條命令語句。一個爲日期,另一個爲您的預訂狀態。 Mysql會首先根據你的第一條命令聲明命令,然後根據你的第二條命令聲明。所以切換順序語句可以解決您的問題。另外在mysql中有「CASE」的「ELSE」關鍵字。

總共我會寫這樣的:

SELECT * 
FROM list 
ORDER BY 
    CASE 
     WHEN `bookings`.`status` = 'Not repported' THEN 1 
     ELSE 2 
    END ASC, 
    date DESC 
LIMIT 1,20 

(我不是很確定在您的「訂單」表現在從何而來,但我離開了那裏,你可能會錯過一個JOIN子句)

+0

謝謝。但是,它並沒有幫助我優先考慮沒有得到支持的部分。 –

+0

很抱歉,但我不明白。根據日期,這應該根據預訂狀態(不是首先報告)和在此訂購中排序。你可以用你的桌子的例子來更新你最初的問題,最後你想做什麼? – chickahoona

+0

我現在編輯了我的帖子。這是我想要的樣子。 –