mySQL 订购依据有图片和 ID

mySQL order by has image AND id

我有一个 table 图像列。 在该列中 - 值是图像 URL。 现在我想按以下顺序从 table 中获取所有行: first - 带有图像的行,按 id 排序。 第二个 - 没有图像的行,按 id 排序。

我试过这段代码(我在某处找到的):

ORDER BY CASE WHEN image IS NULL THEN 0 ELSE 1 END, id DESC

但是没用。

你能帮我吗?

谢谢!

将 0 改成 1:

ORDER BY CASE WHEN image IS NULL THEN 1 ELSE 0 END, id DESC

或为第一个订单添加 DESC

ORDER BY CASE WHEN image IS NULL THEN 0 ELSE 1 END DESC, id DESC

默认顺序为 ASC,您必须在每个字段后加上 ORDER。所以 在您的情况下,您对图像字段进行 ASC 排序,对字段 id

仅进行 DESC 排序

样本

MariaDB [bernd]> SELECT * FROM orderby;
+-----+------+
| id1 | id2  |
+-----+------+
|   1 |    1 |
|   2 |    2 |
|   3 |    3 |
|   4 |    4 |
|   1 |    2 |
|   1 |    3 |
+-----+------+
6 rows in set (0.05 sec)

MariaDB [bernd]> SELECT * FROM orderby ORDER BY id1, id2 DESC;
+-----+------+
| id1 | id2  |
+-----+------+
|   1 |    3 |
|   1 |    2 |
|   1 |    1 |
|   2 |    2 |
|   3 |    3 |
|   4 |    4 |
+-----+------+
6 rows in set (0.05 sec)

MariaDB [bernd]> SELECT * FROM orderby ORDER BY id1 DESC, id2 DESC;
+-----+------+
| id1 | id2  |
+-----+------+
|   4 |    4 |
|   3 |    3 |
|   2 |    2 |
|   1 |    3 |
|   1 |    2 |
|   1 |    1 |
+-----+------+
6 rows in set (0.00 sec)

MariaDB [bernd]> 

布尔表达式:

image IS NULL

对于 false 被计算为 0,对于 true 被计算为 1,因此您不需要 CASE 表达式。

此外,如果对于第 2 级排序,您希望行 按 id 排序,我假设您希望它们按升序排列,因此您不应使用关键字 DESC.

更改为:

ORDER BY image IS NULL, id