作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有如下查询,当我仅按 end_time
订购表格时,该查询有效:
有效
SELECT * FROM table1 WHERE ... ORDER BY field(table1.status, 'c1','a1', 'b1', 'e1',
'd1') asc, IF(table1.status = 'f1', table1.end_time, '') asc LIMIT 20 OFFSET 0;
但是,如果我想在条件排序中再添加一列,例如:
SELECT * FROM table1 WHERE ... ORDER BY field(table1.status, 'c1', 'a1', 'b1', 'e1',
'd1') asc, IF(table1.status = 'f1', (table1.end_time, table1.start_time), '') asc
LIMIT 20 OFFSET 0;
它给了我:
ERROR 1241 (21000): Operand should contain 1 column(s)
但是,以下不带 IF 的查询有效:
SELECT * FROM table1 WHERE ... ORDER BY field(table1.status, 'c1', 'a1', 'b1', 'e1',
'd1') asc, table1.end_time, table1.start_time asc LIMIT 20 OFFSET 0;
如何使用 IF
实现与上面相同的查询最佳答案
如果你只是想在 table1.start_time
以及 table1.status = 'f1'
时订购,你只需要添加另一个 IF:
SELECT *
FROM table1
WHERE ...
ORDER BY field(table1.status, 'c1','a1', 'b1', 'e1','d1') asc,
IF(table1.status = 'f1', table1.end_time, '') asc,
IF(table1.status = 'f1', table1.start_time, '') asc
LIMIT 20 OFFSET 0;
关于MySQL 多个 ORDER BY 基于条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50096583/
我是一名优秀的程序员,十分优秀!