2013-07-26 29 views
2

我有表像Mysql - 我的訂單中發生了什麼?

CREATE TABLE IF NOT EXISTS example 
(id INT NOT NULL AUTO_INCREMENT, 
name VARCHAR(100) NOT NULL, 
primary key (id)) 

我插入到表20的記錄,從1 - > 20像

id | name 
1 | example 0 
2 | example 1 
... 
20 | example 19 

我查詢像

SELECT * 
FROM `example` 
ORDER BY `name` DESC 

但結果是

id | name 
10 | example 9 
9 | example 8 
... 
1 | example 0 

我認爲這是

id | name 
20 | example 19 
19 | example 18 
... 
1 | example 0 

我該怎麼辦我的想法。由於

+2

而且你100%確定表中有20條記錄?就像,真的100%肯定? –

+1

它可能與「自然排序」有關嗎? –

+0

@ N.B。對不起,我輸入錯誤我只是編輯我的記錄plz再看一遍 – LookAtMeNow

回答

1

使用SUBSTRING前加前導零實例0002搶與LOCATE空間後的數字,然後做ORDER BY應該同時使用CAST工作。

SELECT * 
FROM  example 
ORDER BY CAST(SUBSTRING(name,LOCATE(' ',name)+1) AS SIGNED) DESC 
+0

但ORDER BY(名稱+ 0)ASC和ORDER BY(名稱+ 0)DESC具有相同的結果:(? – LookAtMeNow

+0

@defaultNINJA我只是編輯他們PLZ再次看到 – LookAtMeNow

+0

@LookAtMeNow看到更新的答案可能需要調整'SUBSTRING' – defaultNINJA

0
SELECT * 
FROM `example` 
ORDER BY CAST(name AS UNSIGNED)desc; 

fiddle

+0

該ID只是一個自動遞增的字段,不應該用於排序。在這個特定的情況下,OP要求按名稱排序。按不同的領域進行排序,只有重點有正確的順序,並不能解決潛在的問題。 – GolezTrol

+0

@GolezTrol檢查現在。更新 –

+0

這是一個解決方案。 – GolezTrol

2

這是一個字符串排序,而不是一個數字一個

ASCII聰明,降,'9''20'之前預期。這也可以被認爲是'9 '(尾隨空間)與'20'

字符串排序是字符方式。

+0

@defaultNINJA:它被標記爲MySQL – gbn

-1

您按名稱排序會導致alphebetic順序。嘗試

ORDER BY id desc; 
+0

ID只是一個自動遞增的字段,不應該用於排序,在這種情況下,OP會要求按名稱排序。按不同的領域進行排序,只有重點有正確的順序,並不能解決潛在的問題。 – GolezTrol

0

它正在做alpha排序,因爲它是一個字符串。

示例2是示例1000後

你可以在拆分它的兩個字段的名稱和數量 你可以做很多與字符串函數搞亂給它解散,很多種類的某些選項 你可以舉例1000