2011-02-22 68 views
3

我使用它使用的查詢:MySQL的ORDER BY數值問題負數

ORDER BY score DESC; 

「分數」只是持有的數值,也可以是負的。他們似乎沒有以正確的順序顯示。負數可能出現在正數之上。

有誰知道查詢我應該使用像這樣顯示出來:

  • -1
  • -5
  • -10

而且還對s頂部他們這樣做:

* 1 
* 10 
* 11 
* 123 
* 1234 
* 2 
* 25 
* 253 
* 34 

謝謝。

+4

什麼日期類型是'score'。它保存數值,但它是**列類型**數字? – 2011-02-22 22:37:59

+0

似乎沒有。這些結果按字母順序排序。 – GolezTrol 2011-02-22 22:40:46

+0

我敢打賭'分數'欄是文本的,不是數字... – ChrisJ 2011-02-22 22:40:57

回答

5
order by cast(score as int) desc; 

看起來您正在將數字數據存儲在字符串數據類型中。將分數設置爲數字數據類型會更好,如int

+0

'score'是* int *在我的數據庫中。 – Tom 2011-02-22 22:44:54

+0

你可以顯示整個查詢嗎? – mellamokb 2011-02-22 22:46:04

+0

是的 '$ query =「SELECT message,'score',ip,date,name,website,id FROM'messages' WHERE deleted = 0 AND date> DATE_SUB(NOW(),INTERVAL 1 DAY)ORDER BY'score' DESC「; ' – Tom 2011-02-22 22:48:16

0

您的分數數據類型可能是字符類型。正確地將數據類型指定爲具有適當精度的有符號整數或小數將會使此問題消失。

+0

「分數」字段爲* int *。 – Tom 2011-02-22 22:45:39

0

我並沒有得到負數的任何問題,從最大的,責令至少......這是我的創建代碼和查詢,供大家參考:

CREATE TABLE `test` (
    `score` INT(10) NULL 
) 
COLLATE='latin1_swedish_ci' 
ENGINE=InnoDB; 

select * from test order by score desc; 

而且從我的數據庫轉儲:

INSERT INTO `test` (`score`) VALUES (10); 
INSERT INTO `test` (`score`) VALUES (5); 
INSERT INTO `test` (`score`) VALUES (1); 
INSERT INTO `test` (`score`) VALUES (-1); 
INSERT INTO `test` (`score`) VALUES (-5); 
INSERT INTO `test` (`score`) VALUES (-10); 
INSERT INTO `test` (`score`) VALUES (-11); 
INSERT INTO `test` (`score`) VALUES (7); 

希望這有助於...