[英]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
子句中,然后只是status
和created_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.