2017-06-07 22 views
1

ステータス部分の優先順位を付けたいと思います。すべてのものは、最初に現れなければならない。関係なく、日付。しかし、今、それは日付後にeveythingを注文します。どのように私は最初のケース 'repportedパート'の優先順位をつけることができますか?残りのリストは日付の後に表示されます。mysqlの優先順位付けケース

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.DAYOFWEEK() '](https://dev.mysql.com/doc/refman/5.5/en/date-us/)のような関数でメッシュを整えるために、 and-time-functions.html#function_dayofweek)。なぜこれをしないのかの例は、あなたのコードが木曜日に行われた何も処理できず、そのバグを追跡することが完全な不満の練習になる可能性があるということです。 – tadman

+0

ありがとうございます。しかし、それは私がrepportedパートの優先順位をつけるのに役立つわけではありません。 –

+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ない'

、 'repportedない'

2017年1月1日、 'repportedない'

2017年3月7日、15/8/2017

6月2日(月曜日)/

月曜日2017年、注意点としては2017年11月11日

+0

それは日付を推測します。それは、リストの最初に「報告されていない」行をすべて持ち上げるわけではありません。 –

+1

編集を見てください – asmgx

2

2つの注文書があります。 1つは日付、1つは予約ステータスです。 Mysqlはあなたの最初の注文明細書に従って最初に注文し、次に2番目の注文明細書に従って注文します。したがって、注文明細を切り替えることで問題は解決されます。さらに、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

ありがとうございます。しかし、それは私がrepportedパートの優先順位をつけるのに役立つわけではありません。 –

+0

申し訳ありませんが、私は分かりません。これにより、予約状況(最初に報告されたものではない)に従って、そしてこの注文内で日付ごとにすべてを注文する必要があります。おそらく、あなたの最初の質問をあなたのテーブルの例と最終的に何をしたいと思いますか? – chickahoona

+0

私の投稿を編集しました。それが私のように見えるようにする方法です。 –

関連する問題