[英]Sort MySQL column in alphanumeric order
我如何按字母數字順序排序到MySQL;
假設我有一個包含這樣數據的表。
Name + ID
AA | 10
AE | 2
AD | 1
當我對列ID進行排序時,結果是
1
10
2
但是當我在這樣的select語句中為列ID添加+ 0時
SELECT * FROM tableName ORDER BY columnName + 0;
1
2
10
但是“名稱”列的結果是這樣
AA
AE
AD
我已經提到了此鏈接,但對我來說不起作用。 Mysql中的字母數字順序
注意:所有列類型均為varchar,我無法預測將插入哪些數據。 我知道我的問題很簡單,但仍然無法獲得想要的結果。 另外,我無法使用Java對結果進行排序,因為我在其上使用了LIMIT。 我將不勝感激。謝謝
附加信息:(要根據名稱和ID排序的樣本表)header1是設置到另一個表的Name,與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');
將字段的數據類型更改為數字數據類型,而不是字符類型。
加零必須有效,因為它將數據轉換為數字。
似乎沒有排序,因為它顯示了我插入數據的順序。
現在很清楚! 問題是您誤解了表的工作方式。 表格沒有定義的順序。 而已。 每當執行不帶ORDER BY的SELECT時,DB都可以按其喜歡的任何順序返回列。 而且您對此無能為力。
通常,以主鍵確定的順序返回行。 如果沒有,插入順序將被使用,除非有刪除。 刪除后,數據庫會將新記錄放在某處以填補空白。 但是,這不是保證的行為,當您切換到另一個版本或任何其他版本時,它可能會更改。
永遠不要依賴表中行的順序。 如果訂單很重要,請始終使用ORDER BY或包含ORDER BY的VIEW。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.