【发布时间】:2011-08-15 02:40:08
【问题描述】:
我有一个 MySQL 表,其中包含许多产品。我想要做的是按一个特定列对表进行排序(大多数值以数字开头,例如:1st、2nd)等。但是,由于某些记录没有此列的值,所以当我尝试排序时,表会自动将空行放在首位。
我正在寻找一种方法来对行 ASCENDING 进行排序,但只在排序记录的末尾插入空白记录,如果这有意义的话?
任何帮助将不胜感激!
【问题讨论】:
我有一个 MySQL 表,其中包含许多产品。我想要做的是按一个特定列对表进行排序(大多数值以数字开头,例如:1st、2nd)等。但是,由于某些记录没有此列的值,所以当我尝试排序时,表会自动将空行放在首位。
我正在寻找一种方法来对行 ASCENDING 进行排序,但只在排序记录的末尾插入空白记录,如果这有意义的话?
任何帮助将不胜感激!
【问题讨论】:
select * from table
order by if(field = '' or field is null,1,0),field
【讨论】:
ORDER BY IF (`field` <> '', 0, 1)ASC;另外,在ORDER BY 子句中使用函数时要小心; MySQL 在这些情况下不能使用索引。这些查询可以在“小”表上正常工作,但随着项目规模的扩大,速度会急剧下降。
这是最有效的方法之一
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 |
【讨论】:
ORDER BY name IS NOT TRUE, name DESC