2014-09-28 82 views
2

注意我的值實際上是空字符串非空。MySql:ORDER BY ASC,空值在底部

我想排序我的表專輯ASC與結尾的空值。我發現每個堆棧溢出發佈沒有在我的數據庫上工作。

繼不起作用:

  • SELECT專輯FROM歌曲ORDER BY ISNULL(專輯, '1')
  • SELECT專輯FROM歌曲ORDER BY專輯NULLS LAST
  • SELECT專輯FROM歌曲ORDER按專輯IS NULL
  • SELECT專輯FROM歌曲ORDER BY -album DESC
  • SELECT專輯FROM歌曲ORDER BY ISNULL(專輯),專輯ASC
  • SELECT FROM Album FROM ORDER BY ISNULL(Album)
  • SELECT Album FROM songs ORDER BY(CASE WHEN Album IS NULL then 1 ELSE 0 END),Album
  • SELECT ORDER BY ISNULL(Album),Album;
  • 當專輯爲null,則2其他1月底SELECT專輯FROM歌曲ORDER BY情況下,專輯
+0

難道這些真的空值? – 2014-09-28 05:12:25

+0

如何檢查它們是否爲空?這個「」和null是否有區別? – rez 2014-09-28 05:15:33

+0

看看http://stackoverflow.com/questions/13542065/is-better-use-an-empty-value-as-a-or-as-null – 2014-09-28 05:22:34

回答

1
select album from songs ORDER BY CASE WHEN album IS NULL THEN 1 WHEN album= '' THEN 2 ELSE 3 END DESC, album ASC 

很會照顧空字符串,以及

+0

http://i.gyazo.com/0d08af7e51d8858181f39774c023eacb .png這是我得到的 – rez 2014-09-28 05:16:27

+0

你確定這些值是NULL,而不是空字符串?要最後對空字符串進行排序,請指定「按照大小寫排序=''然後1 else 0 end,album – 2014-09-28 05:18:15

+0

完全相同的結果 – rez 2014-09-28 05:18:33

1

看着你的輸出,我相信你會混淆空和空字符串。

Select case when album is null then 'NULL' 
     when album = '' then 'string.empty' 
     Else album end as Album 
From song 
Order by case when album is null then 2 
     when album = '' then 1 
     Else 0 end, album 

http://sqlfiddle.com/#!2/84541/3

+0

你確定你輸入的是正確的嗎?我沒有得到任何結果 – rez 2014-09-28 05:23:19

+0

@shiro,它有一個錯字,但不應該導致沒有結果,它應該導致錯誤。如果你沒有得到任何結果,你還有其他問題。 – jmoreno 2014-09-28 05:43:58

+0

它的因爲即時通訊運行SQL查詢我的自定義PHP網站,不承認錯誤 – rez 2014-09-28 05:48:46

0

也許認爲PHP的一個ORM?學說或推動,有很多口味。 仍然手動創建SQL,爲什麼?

但是你的NULL問題確實沒有用ORM解決。

爲什麼不設置此列上的約束:

NOT NULL DEFAULT ''