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
我有一个 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