2013-08-02 50 views
2

我有這樣的一個表:排序NULL值與MySQL

 
id   description status login 
XWPggD  bbbbbbbb 1  js 
0JIERf  test1  1  js 
0gd2x0  nothing  NULL  js 
bSIUIu  dev   NULL  bob 
0BNh27  hello  1  js 
2TYXjd  down  NULL  inge 
axE1m5  bobby  NULL  bob 
1iSlQM  qwe   0  js 
9dPjoP  descr  NULL  inge 

我試圖通過狀態輸出(在底部空值)進行排序,然後通過登錄。 但我也想登錄值,其中狀態爲NULL被正確排序的,所以它看起來像:

 
id   description status login 
XWPggD  bbbbbbbb 1  js 
0JIERf  test1  1  js 
0BNh27  hello  1  js 
1iSlQM  qwe   0  js 
axE1m5  bobby  NULL  bob 
bSIUIu  dev   NULL  bob 
9dPjoP  descr  NULL  inge 
2TYXjd  down  NULL  inge 
0gd2x0  nothing  NULL  js 

但是當我嘗試類似:

SELECT id, description, status, login FROM dev 
ORDER BY isnull(status) ASC, isnull(login) ASC; 

我總是得到怪異的登錄順序,其狀態值爲NULL。

回答

10

爲什麼這麼複雜的答案...

SELECT id, description, status, login FROM dev 
ORDER BY status IS NULL, status DESC, login IS NULL, login DESC 
+1

好ste !!! !!!!! –

+0

完美的作品很簡單。 – megadave

4
SELECT id, description, status, login FROM dev 
ORDER BY (Case when status is null then -1 Else status End) Desc, 
(Case when login is null then -1 Else 1 End) Desc 
1

嘗試使用colaesce功能如下

SELECT id, description, status, login 
FROM dev 
ORDER BY COALESCE(status,-1) ASC, COALESCE(login,-1) ASC 
+0

爲什麼你檢查登錄空? –

+0

嗯好鷹眼g –