2013-03-17 23 views
1

訂購我已經建造在這裏查詢中使用MySQL工作臺:mysql命令按編號查詢,而不是整數

USE wcms; 
SELECT PLA_FNAME, PLA_LNAME, PLA_GS FROM player ORDER BY PLA_GS DESC; 

然後顯示這些結果:

enter image description here

正如你所看到的,它將玩家目標得分列按9排序爲最高值,而不是20.對整個數字排列此列的最佳方法是什麼,所以20位在列表頂部?

+0

「PLA_GS」列的類型是什麼? – JodyT 2013-03-17 17:25:47

+1

顯然你使用了錯誤的數據類型 - 當數字被放入_text_數據類型時會發生這種情況。使它成爲一種合適的數字數據類型,並且問題消失。 – CBroe 2013-03-17 17:25:50

回答

6

試試這個順序聲明

ORDER BY PLA_GS + 0 desc 
0

演員是合適的解決方案,這可能對於懶人的工作:

ORDER BY PLA_GS+0 DESC 
0

試試這個:

ORDER BY Cast(PLA_GS as int) DESC 

查詢:

USE wcms; 
SELECT PLA_FNAME, PLA_LNAME, PLA_GS FROM player ORDER BY Cast(PLA_GS as int) DESC; 
0

當使用文本數據類型存儲數字時,會發生這種「排序錯誤」(1)。命令

DESCRIBE player; 

所示,除其他信息,其數據類型用於每一列,將可能顯示在這種情況下像varchar一些文本數據類型。

如果您有權訪問更改表格結構,請改用數字的數字數據類型,如int。這將解決你的排序問題。

此外,你會節省硬盤上的一些空間,並加快你的查詢。 int需要的內存少於以ascii格式保存數字(這是使用例如varchar時會發生的情況),並且比較整數比比較(可能長的)文本元素快得多。

如果您無權更改表格結構,請使用其他答案中已提供的轉換技巧。

(1)實際上不是一個錯誤。只是按字符排序。

0

謝謝大家的幫助。問題在於,如前所述,該列是錯誤的數據類型。這是通過固定設置欄爲int:

ALTER TABLE PLAYER MODIFY COLUMN PLAY_GS INT(3); 

然後運行查詢:

SELECT PLA_FNAME, PLA_LNAME, PLA_GS FROM player ORDER BY PLA_GS DESC; 

給我正確排序結果。