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:按字段排序,将空单元格放在末尾的主要内容,如果未能解决你的问题,请参考以下文章