簡體   English   中英

按條件和字段排序

[英]Order by with condition and with field

我想將今天已安排日期的行設置為狀態 2,如果它今天未安排日期,我希望狀態 1、2、3 的結果基於創建時間。 我怎樣才能把它放在查詢中?

這是表格的示例

table1
id | scheduled_date        | status | created_at
1  | null                  | 1      | 2021-12-20 00.00.00
2  | 2021-12-27 00.00.00   | 2      | 2021-12-19 00.00.00
3  | 2021-12-26 00.00.00   | 3      | 2021-12-23 00.00.00
4  | null                  | 1      | 2021-12-15 00.00.00

這是我到目前為止嘗試過的查詢

select *
from `table1`
where `status` <> 0
order by CASE WHEN date(scheduled_date) = '2021-12-27' and status = 2 then 1 END asc,
         FIELD(status, 1, 2, 3) asc,
         `created_at` asc

但是我得到了第4,1,2,3行的結果我想要第2,4,1,3行的結果

任何幫助將不勝感激。 我也在嘗試在 laravel 上執行此操作,所以如果它的 eloquent 查詢非常感謝

我想將今天已安排日期的行設置為狀態 2,如果它今天未安排日期,我希望狀態 1、2、3 的結果基於創建時間。

測試這個

ORDER BY CASE WHEN DATE(scheduled_date) = '2021-12-27' AND status = 2 
              THEN 0
              ELSE status  -- or FIELD(status, 1, 2, 3)
              END,
         created_at

首先,使用 boolean 表達式:

DATE(scheduled_date) = '2021-12-27' AND status = 2

ORDER BY子句中,然后只是statuscreated_at

ORDER BY DATE(scheduled_date) = '2021-12-27' AND status = 2 DESC,
         status,
         created_at

請參閱演示

我認為空值在這里造成了麻煩。 你可以試試以下

select *
  from `table1`
where `status` <> 0
order by CASE WHEN date(scheduled_date) = '2021-12-27' and status = 2 then 1 
              ELSE 2 
          END asc,
         FIELD(status, 1, 2, 3) asc,
         `created_at` asc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM