2011-02-03 300 views
2

如何按AlphaNumeric順序排序爲MySQL;按字母數字順序對MySQL列進行排序

假設我有一個這樣的數據表。

Name + ID 
AA  | 10 
AE  | 2 
AD  | 1 

當我排序列ID的結果是

1 
10 
2 

但是,當我在選擇語句添加+ 0這樣的列ID

SELECT * FROM tableName ORDER BY columnName + 0; 

1 
2 
10 

但對於列名的結果是這

AA 
AE 
AD 

我已經提到這個鏈接,但它不適合我。 Alphanumeric Order By in Mysql

注意:所有列類型都是varchar,我無法預測要插入的數據。 我知道我的問題很簡單,但仍然無法得到我想要的結果。 另外我不能使用Java對結果進行排序,因爲我使用了LIMIT。 我會明白任何help.Thanks

附加信息:(樣品表進行排序上的名稱和ID基) 的頭1是設置爲另一表中的名稱,並用HEADER2 W/C同樣是ID

CREATE TABLE IF NOT EXISTS `sort` (
    `header1` varchar(200) DEFAULT NULL, 
    `header2` varchar(200) DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 


INSERT INTO `sort` (`header1`, `header2`) VALUES 
('AA', '10'), 
('AE', '2'), 
('AD', '1'), 
('AD', '1'), 
('AF', 'a'), 
('AF', 'a1'), 
('1', 'a1'); 
+1

當你不能使用Java時,你應該刪除標籤。您還應該更加精確,例如告訴我們您期望的數據。那麼`(AA,5,A6,B4,9C)`,你是否也需要對它進行分類? – maaartinus 2011-02-03 13:24:00

+0

字符串的排序與數字不同。你想排序你的字符串列像一個數字。如果您只在該列中存儲數字,那麼您應該將其設置爲數字數據類型,並且您的問題將消失。 – 2011-02-03 13:35:11

+0

我不能使用Java,因爲我需要通過LIMIT得到結果。這是由於我的分頁編碼。我使用LIMIT來加速查詢。而且我還需要根據列進行排序。是的,我需要這樣排序(AA,F,A6,B4,9C) – ace 2011-02-03 13:38:05

回答

0

它看起來像它沒有排序,因爲它顯示了我如何插入數據的順序。

現在很清楚!問題在於你誤解了表格的工作原理。 沒有爲表格定義的順序。就是這樣。每當你做一個沒有ORDER BY的SELECT時,數據庫可以按照它喜歡的順序自由返回列。對此你無能爲力。

正常情況下,行按主鍵確定的順序返回。如果沒有,則會使用廣告訂單,除非有刪除。刪除後,數據庫將新記錄放在某處以填補空白。但是,這不是保證行爲,當您切換到另一個版本或其他任何版本時,它可能會改變。

不要依賴表中行的順序。如果訂單很重要,請始終使用ORDER BY或包含ORDER BY的VIEW。

1

將字段的數據類型更改爲數字數據類型而不是字符類型。

加0必須工作,因爲它將數據轉換爲數字。

相關問題