2009-11-16 79 views
1

我在mysql表中有很多行。有一個order_id列。我想按兩列排序,首先是order_id,然後是id(自動增量)。 問題是,我輸入了1,2,3,4,5 ...作爲order_id,爲其他人留下空白。在我的例子中,我想首先顯示具有數字1,2,3,4的行,但是它顯示了帶有空白order_id的行,因爲它小於1. 有沒有辦法在1開始訂單?我可以從給定的數字開始訂購mysql嗎?

例子:

id | order_id | name 
1 | NULL  | test name 1 
2 | 1  | test name 2 
3 | NULL  | test name 3 
4 | 2  | test name 4 
5 | 3  | test name 5 

我想我的命令語句給出的結果

test name 2 
test name 4 
test name 5 
test name 1 
test name 3 

正如你可以從例如我第一次爲了用「的order_id」列從1開始看

感謝您的任何幫助。

+0

你真的在order_id列中有空白而不是「NULL」條目嗎?您用於order_id的數據類型是什麼? – 2009-11-16 15:42:41

+0

感謝您的回覆。我正在使用tinyint(10)。這實際上被用作首先顯示(精選)的方法,然後繼續處理其餘的行。我的默認值爲NULL。對不起,我把這一部分留給了,現在對編碼看起來很關鍵。 – markie 2009-11-16 15:51:14

回答

4

缺失的值是否代表NULL?如果是這樣那麼這樣的事情應該做的伎倆:

SELECT * 
FROM your_table 
ORDER BY IF(order_id IS NULL, 1, 0), order_id, id 

如果丟失的值不NULL,那麼你就需要相應地改變你的IF條款。例如,如果缺失的字段實際上是空字符串,那麼你可能會使用類似這樣的代碼:

SELECT * 
FROM your_table 
ORDER BY IF(order_id = '', 1, 0), order_id, id 
+0

謝謝你的回覆,這應該很好:) – markie 2009-11-16 15:52:18

+0

如果缺少字段是字符串,我會說這個用戶使用order_id列的錯誤數據類型。 ;) – Powerlord 2009-11-16 15:53:34

+0

@ R. Bemrose:不一定,我想這取決於實際數據。例如,看到類似「A1116XYZ5」等的ID並不罕見(仍然,沒有理由使用空字符串而不是NULL來表示未知值)。 – LukeH 2009-11-16 16:03:19

1

如果你想與order_id省略行,則只需添加一個WHERE子句(where order_id is not null )。否則,嘗試添加一列來選擇這樣的:

if(order_id IS NULL or order_id='', 1, 0) 

,然後排序ASC在此列第一,這將對非空order_id第一。

相關問題