MYSQL条件ORDER BY语句

MYSQL条件ORDER BY语句,mysql,sql-order-by,Mysql,Sql Order By,我需要一个有条件的orderby语句。用外行的话说是这样的: IF index_order IS NULL ORDER BY id ASC ELSE ORDER BY index_order ASC. 因此,基本上,它将首先按ID对所有具有空索引顺序值的行进行排序,然后按索引顺序对其余行进行排序 非常感谢您的帮助。只需使用: ORDER BY index_order, id 因为NULL的排序总是低于任何其他值。因此,索引顺序为NULL的所有行将首先分组。然后,它们的顺序将由id解析 请回

我需要一个有条件的orderby语句。用外行的话说是这样的:

IF index_order IS NULL ORDER BY id ASC ELSE ORDER BY index_order ASC.
因此,基本上,它将首先按ID对所有具有空索引顺序值的行进行排序,然后按索引顺序对其余行进行排序

非常感谢您的帮助。

只需使用:

ORDER BY index_order, id
因为NULL的排序总是低于任何其他值。因此,索引顺序为NULL的所有行将首先分组。然后,它们的顺序将由
id
解析


请回复您的评论:

我试过了

mysql> create table foo (id int auto_increment primary key, index_order int);
mysql> insert into foo values (1, 2), (2, 1), (3, null), (4, null);
mysql> select * from foo order by index_order, id;
+----+-------------+
| id | index_order |
+----+-------------+
|  3 |        NULL |
|  4 |        NULL |
|  2 |           1 |
|  1 |           2 |
+----+-------------+
它首先对
index\u order
为空的位置进行排序,并用
id
解决关系。然后按非空
索引顺序
升序排序


我不确定从您的描述中我是否理解您希望它以不同的方式排序。

如果:

ORDER BY COALESCE(NULLIF(id, ''), index_order), index_order

要了解更多信息,请单击和

可能的副本可能是副本,但比尔的答案比那张一汉克的账单好。我一开始试过了,这对我来说很有效,但是,我需要按ID ASC对空行进行排序,并且似乎在转到index_order之前按ID DESC对空行进行排序。有什么想法吗?我想我需要指定NULL index\u order行由ID列按升序排序-它们按index\u顺序移动。如上所述,它可以正常工作,除了对空行进行的排序与我需要的相反。