2015-05-19 40 views
1

我想通過遠程命令,但我的距離和輸出如下:訂購SQL內不是100%正確

2m4f 
    2m5.5f 
    2m5f 
    2m6f 
    2m7f 
    3m 

正如你可以看到2m5.5f來2m.5f

有沒有去,由此,我可以把它因此與.5f任何值會經過「2.5F」像下面

2m4f 
    2m5f 
    2m5.5f 
    2m6f 
    2m7f 
    3m 

我對這個代碼是:

$sqlhorses = "SELECT distance,Place,Runners FROM `horsesrp` 
    WHERE 
`Horse` = '".$horse."' order by distance"; 

說明:距離被存儲爲VARCHAR(50)

+2

您應該更改表格中的數據以便排序...或使用可排序的格式創建新的欄目... – Random

+0

爲什麼您不要簡單地在代碼中對它們進行重新排序 –

+1

您正在排序** STRINGS **。任何數據庫都無法知道您需要「自然」排序。無論如何,這些距離究竟如何? '2米和5.5英尺'? –

回答

0

這是預期的結果通過一個varchar字段排序時。特殊字符等於低於字母字符。

你需要找到存儲數據,或簡單地在應用程序代碼中的數據進行排序的新途徑

1

作爲評價和其他答覆中提到,問題是,你是一個字符串排序。在MySQL中,並與你的字符串,則可以使用解決這個問題:

order by distance + 0, 
     substring_index(distance, 'm', -1) + 0 

+ 0確實在MySQL無聲轉換。它將前導數字轉換爲數字,這正是您想要訂購的目的。

+0

我們可以稱之爲「無聲轉換」爲「類型轉換」嗎? – SaidbakR