order by排序是最常用的功能,但是排序有時會遇到數據為空null的情況,這樣排序就會亂了,這里以MySQL為例,記錄我遇到的問題和解決思路。
問題:
網頁要實現table的行鼠標拖拽排序,我用AngularJs集成了一個TableDnD開源插件,可以實現,然后在數據庫表中增加一個排序字段indexId,但是原來的大量數據是沒有排序過的,所以該字段為null。
這樣order by時,為null的數據就會排在最前邊。
寫個測試表模擬一下,如下效果:
解決辦法:
-
最優辦法:利用MySQL中的一個小技巧,在字段前面加上一個負號,也就是減號,ASC改成DESC ,DESC改成ASC
-
重新生成一列,比如agenull,利用is null操作符,把NULL值的行變成1,非NULL值的行變成0,先對該字段排序,再對age排序
-
直接利用isnull函數對age列求值,跟第一種方法的道理是一樣的
方法同樣試用SQL Server和Oracle等數據庫