MySQL:按字段排序,将空单元格放在末尾

Posted

技术标签:

【中文标题】MySQL:按字段排序,将空单元格放在末尾【英文标题】:MySQL: Order by field, placing empty cells at end 【发布时间】:2011-08-15 02:40:08 【问题描述】:

我有一个 mysql 表,其中包含许多产品。我想要做的是按一个特定列对表进行排序(大多数值以数字开头,例如:1st、2nd)等。但是,由于某些记录没有此列的值,所以当我尝试排序时,表会自动将空行放在首位。

我正在寻找一种方法来对行 ASCENDING 进行排序,但只在排序记录的末尾插入空白记录,如果这有意义的话?

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:
select * from table
order by if(field = '' or field is null,1,0),field

【讨论】:

@BenM:如果@nick 的回答解决了您的问题,您应该接受它。 @尼克:+1。 如果可以的话,再问你一个简单的问题? ***.com/questions/5825875/mysql-sort-1st-before-101st @Ken White - 我必须再等 2 分钟才能接受尼克的回答... 简单一点:ORDER BY IF (`field` <> '', 0, 1)ASC;另外,在ORDER BY 子句中使用函数时要小心; MySQL 在这些情况下不能使用索引。这些查询可以在“小”表上正常工作,但随着项目规模的扩大,速度会急剧下降。【参考方案2】:

这是最有效的方法之一

ASC 顺序

SELECT * FROM user ORDER BY name IS NULL, name ASC

预期结果:

+----+--------+------------+
| id |  name  | date_login |
+----+--------+------------+
|  3 |  david | 2016-12-24 |
|  2 |  john  | NULL       |
|  4 |  zayne | 2017-03-02 |
|  1 |  NULL  | 2017-03-12 |

DESC 顺序

SELECT * FROM user ORDER BY name IS NULL, name DESC

预期结果:

+----+--------+------------+
| id |  name  | date_login |
+----+--------+------------+
|  4 |  zayne | 2017-03-02 |
|  2 |  john  | NULL       |
|  3 |  david | 2016-12-24 |
|  1 |  NULL  | 2017-03-12 |

【讨论】:

这可以正常工作,并且是 NULL 值的最简单方法,但不适用于空字符串值。 如果你需要同时测试NULL和空字符串,你可以做ORDER BY name IS NOT TRUE, name DESC

以上是关于MySQL:按字段排序,将空单元格放在末尾的主要内容,如果未能解决你的问题,请参考以下文章

按创建排序表格视图单元格(swift)

按计算距离排序 UITableView 单元格

在表格视图中重新排序按日期排序的单元格项目

如何按字母顺序对表格视图单元格进行排序

按副标题排序 tableview 单元格

如何按特定单元格快速排序二维数组?