【发布时间】:2022-01-26 08:44:29
【问题描述】:
我想将今天已安排日期的行设置为状态 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 上执行此操作,所以如果它的雄辩的查询非常受欢迎。
【问题讨论】:
-
你真的把 2021-12-27 的日期写成未加引号的吗?
-
是的,我也试过引用它,但结果是一样的
-
... CASE WHEN date(scheduled_date) = 2021-12-27 and status = 2 then 1 END asc, ...你比较date(scheduled_date)和算术表达式2021-12-27=1982。必须是... CASE WHEN date(scheduled_date) = '2021-12-27' and status = 2 then 1 END asc, ...,阅读dev.mysql.com/doc/refman/8.0/en/date-and-time-literals.html -
@Akina 就像我说的那样,即使我引用它,它也会显示相同的结果。无论如何,我会用引号编辑我的帖子
-
由于您按升序排列
CASE,因此ELSE部分中的null(因为您省略了ELSE部分)实际上位于1之前案例
标签: mysql sql laravel eloquent