訂購我已經建造在這裏查詢中使用MySQL工作臺:mysql命令按編號查詢,而不是整數
USE wcms;
SELECT PLA_FNAME, PLA_LNAME, PLA_GS FROM player ORDER BY PLA_GS DESC;
然後顯示這些結果:
正如你所看到的,它將玩家目標得分列按9排序爲最高值,而不是20.對整個數字排列此列的最佳方法是什麼,所以20位在列表頂部?
訂購我已經建造在這裏查詢中使用MySQL工作臺:mysql命令按編號查詢,而不是整數
USE wcms;
SELECT PLA_FNAME, PLA_LNAME, PLA_GS FROM player ORDER BY PLA_GS DESC;
然後顯示這些結果:
正如你所看到的,它將玩家目標得分列按9排序爲最高值,而不是20.對整個數字排列此列的最佳方法是什麼,所以20位在列表頂部?
試試這個順序聲明
ORDER BY PLA_GS + 0 desc
演員是合適的解決方案,這可能對於懶人的工作:
ORDER BY PLA_GS+0 DESC
試試這個:
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;
當使用文本數據類型存儲數字時,會發生這種「排序錯誤」(1)。命令
DESCRIBE player;
所示,除其他信息,其數據類型用於每一列,將可能顯示在這種情況下像varchar
一些文本數據類型。
如果您有權訪問更改表格結構,請改用數字的數字數據類型,如int
。這將解決你的排序問題。
此外,你會節省硬盤上的一些空間,並加快你的查詢。 int
需要的內存少於以ascii格式保存數字(這是使用例如varchar
時會發生的情況),並且比較整數比比較(可能長的)文本元素快得多。
如果您無權更改表格結構,請使用其他答案中已提供的轉換技巧。
(1)實際上不是一個錯誤。只是按字符排序。
謝謝大家的幫助。問題在於,如前所述,該列是錯誤的數據類型。這是通過固定設置欄爲int:
ALTER TABLE PLAYER MODIFY COLUMN PLAY_GS INT(3);
然後運行查詢:
SELECT PLA_FNAME, PLA_LNAME, PLA_GS FROM player ORDER BY PLA_GS DESC;
給我正確排序結果。
「PLA_GS」列的類型是什麼? – JodyT 2013-03-17 17:25:47
顯然你使用了錯誤的數據類型 - 當數字被放入_text_數據類型時會發生這種情況。使它成爲一種合適的數字數據類型,並且問題消失。 – CBroe 2013-03-17 17:25:50