2012-02-15 155 views
2

我該如何解決這個小問題SQL命令失敗

這裏是截圖:

enter image description here

,這是查詢:

SELECT * 
FROM serverinfo 
ORDER BY rank_pts DESC 

正如你所看到的訂單不合格。

回答

0

變化rank_pts爲FLOAT *edit。它看起來像其錯誤的類型進行排序

+0

但它會分手「」 – Dave 2012-02-16 00:01:33

+3

咩,+1實現的類型可能是VARCHAR,但-1建議INT時,他顯然有他需要存儲十進制值。所以+0從我。 – Interrobang 2012-02-16 00:01:52

+0

是的,你說得對@Interrobang。對於那個很抱歉 ! – seanbreeden 2012-02-16 00:06:15

4

看來你ranl_pts列是VARCHAR類型,所以它不排序數字。

使用以下技巧。

SELECT * 
    FROM serverinfo 
    ORDER BY rank_pts+0 DESC 

OR

SELECT * 
    FROM serverinfo 
    ORDER BY CAST(rank_pts AS DOUBLE) desc 
+0

感謝兄弟:-) – Dave 2012-02-16 00:09:05

8

你可以試試這個:

ORDER BY CAST(rank_pts as float) DESC 
3

你可能應該是列類型更改爲浮動。正如其他人指出的,它看起來像一個varchar或文本列。如果情況並非如此,PHPMyAdmin僅以本地化格式顯示(小數代表,而不是 - 對於我們英國人),請不要理會我的答案。

雖然鑄造結果查詢將工作作爲阿爾貝託認爲,這是inefficent對每個查詢做。如果您想操作數字並對數據進行排序,則應將其存儲爲數字。最終,您可能希望在不同的本地化環境下顯示數字,這會讓您頭痛不已。

我將在數據存儲爲在DB的浮子和處理如何在應用側的局部格式顯示它的任何邏輯。

+2

+1。將格式保留到前端。存儲格式化值會使應用程序非常脆弱。 – Leigh 2012-02-16 20:36:19

3

我建議改變列的數據類型是數字和字符不。這肯定會影響代碼的其他部分,但我認爲這是值得的,以避免其他數字值存儲的副作用,因爲它是字符表示。

顯然,速戰速決是投列在order by,老鄉程序員已經指出。

+2

我真的很失望,這裏提到的許多問題都是關於快速修復,而不是真正的解決方案。 – 2012-02-16 15:16:28

0
SELECT * 
FROM serverinfo 
ORDER BY CAST(Rank_Pts AS DOUBLE) desc