在SQL内排序不是100%正确

时间:2015-05-19 14:34:15

标签: php mysql sql

我试图按距离排序,但我的距离和输出如下:

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 个答案:

答案 0 :(得分:1)

正如评论和其他答案所述,问题在于您是按字符串排序的。在MySQL和您的字符串中,您可以使用以下方法解决此问题:

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

+ 0在MySQL中执行静默转换。它将前导数字转换为数字,这是您想要订购的目的。

答案 1 :(得分:0)

这是按varchar字段排序时的预期结果。特殊字符等于低于字母字符。

您需要找到一种新的方式来存储数据,或者只是在应用程序代码中对数据进行排序