MySQL:按字段排序,将空单元格放在最后

Ben*_*enM 40 mysql sorting

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

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

任何帮助都会非常感激!

Nic*_*ssu 78

select * from table
order by if(field = '' or field is null,1,0),field
Run Code Online (Sandbox Code Playgroud)

  • 更简单:`ORDER BY IF(\`field \`<>'',0,1)`ASC; 另外,在`ORDER BY`子句中使用函数时要小心; 在这些情况下,MySQL无法使用索引.这些查询在"小"表上可以正常工作,但随着项目规模的扩大,这些查询会大幅减慢. (9认同)

小智 6

这是最有效的方法之一

ASC订单

SELECT * FROM user ORDER BY name IS NULL, name ASC
Run Code Online (Sandbox Code Playgroud)

预期结果:

+----+--------+------------+
| id |  name  | date_login |
+----+--------+------------+
|  3 |  david | 2016-12-24 |
|  2 |  john  | NULL       |
|  4 |  zayne | 2017-03-02 |
|  1 |  NULL  | 2017-03-12 |
Run Code Online (Sandbox Code Playgroud)

DESC订单

SELECT * FROM user ORDER BY name IS NULL, name DESC
Run Code Online (Sandbox Code Playgroud)

预期结果:

+----+--------+------------+
| id |  name  | date_login |
+----+--------+------------+
|  4 |  zayne | 2017-03-02 |
|  2 |  john  | NULL       |
|  3 |  david | 2016-12-24 |
|  1 |  NULL  | 2017-03-12 |
Run Code Online (Sandbox Code Playgroud)

  • 如果您需要测试 NULL 和空字符串,您可以执行“ORDER BY name IS NOT TRUE, name DESC” (2认同)