2010-04-05 40 views
2

我有一個名爲「menu_order」的列沒有默認值。當我選擇此列的使用下面的select語句的內容:如何在MySQL中輸出訂單中的項目?

SELECT * FROM categories ORDER BY menu_order ASC 

它列出了第一,然後什麼都沒有爲他們的菜單的順序一個人的有1和2的和3的類別項目。有什麼辦法可以防止SQL在我試圖按順序列出東西時不採取任何措施來避免數字出現?

因此,舉例來說,如果我有:

cat_name | menu_order 
---------------------- 
Lunch | 1 
Dinner | 

我執行我的查詢,輸出應該是:

Lunch Dinner 

不:

Dinner Lunch 

回答

1

您可以通過大量

ORDER BY IFNULL(menu_order, 1000) ASC 

使用IFNULL功能的順序,你甚至可以嘗試使用一個case statement

ORDER BY 
CASE 
    WHEN menu_order IS NULL THEN 1 
    ELSE 0 
END ASC, 
menu_order ASC 
7

這將使空值最後:

SELECT * 
FROM categories 
ORDER BY menu_order IS NULL ASC, menu_order ASC 
+0

我一定是搞錯了試圖解釋我的問題,這裏給出的所有代碼仍然使空值首先顯示出來,我希望那些顯示在已經被賦值爲數值的那些末尾。所以即使是分配的值是1000000 - 我希望它來之前有一個空值。 – RailsRor 2010-04-05 07:40:16

+0

RailsRor:對不起,解決方案是使用ASC而不是DESC。我編輯了我的答案。 – 2010-04-05 07:41:08

+0

接受的答案很好,但我覺得這個更清晰。我不明白爲什麼有些用戶會在社區有時間提供有用的回覆之前快速接受答案。 – 2010-04-05 08:07:52

1
ORDER BY IFNULL(menu_order, 99999999) ASC 
+1

耶。更多的贊成正確答案。 – 2010-04-05 08:28:19

相關問題