【问题标题】:mySQL order by has image AND idmySQL order by 有图像和 id
【发布时间】:2021-12-28 20:03:57
【问题描述】:

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

我试过这段代码(我在某个地方找到的):

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

但它不起作用。

你能帮我吗?

谢谢!

【问题讨论】:

标签: mysql sql-order-by case sql-null


【解决方案1】:

布尔表达式:

image IS NULL

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

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

改为:

ORDER BY image IS NULL, id 

【讨论】:

  • 它对我不起作用。没有你的代码sn-ps。我仍然只得到没有图像的项目,按 id 排序。 orderby id 工作正常。我需要的是首先我会得到所有有图像的项目,然后 - 没有的项目。另外 - 图像字段不是布尔字段。它包含图像网址。也许这就是为什么它不起作用?感谢您的宝贵时间!
  • @AnneK 什么 sn-ps?只有 1 个:ORDER BY image IS NULL, id。如果nullimage 列中有null,那么带有null 的行将被放置在结果的底部。这就是你所要求的。如果您得到不同的结果,这意味着您拥有的数据不同,或者您做错了什么。
  • @AnneK 我知道image 列不是布尔值。表达式 image IS NULL 是布尔值。您确定列中有nulls 还是它们只是空字符串''
  • 有效!我更改为 image = '' 现在效果很好。非常感谢!!
【解决方案2】:

将 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]> 

【讨论】:

    猜你喜欢
    • 2015-02-26
    • 2021-02-22
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多