MySQL查询与数字排序

时间:2011-10-04 19:00:04

标签: php mysql sorting

我有以下查询:

$result = $mysqli->query('SELECT DISTINCT SKU_SIZE_PART1 
                          FROM SKU_DATA 
                          WHERE SKU_BRANDNAME = "'.$brand.'" 
                          ORDER BY SKU_SIZE_PART1 DESC');

while( $row = $result->fetch_assoc()){
    $sku_size1 = $row['SKU_SIZE_PART1'];

    echo $sku_size1;
}

基本上发生的事情是......订单全都搞砸了。这是出现的结果:

9.50, 8.75, 8.00, 7.50, 7.00, 37, 35, 33, 325, 32, 315, 31, 305, 30, 295

325首先应该出现,然后是315然后再出现。

我该怎么做才能实现这一目标?

1 个答案:

答案 0 :(得分:3)

您需要将sku_size_part1投射到浮动中。

这会降低您的查询速度,但它会起作用:

$brand = mysqli_real_escape_string($brand);
$result = $mysqli->query("SELECT DISTINCT sku_size_part1
                          FROM sku_data 
                          WHERE sku_brandname = '$brand' 
                          ORDER BY CAST(sku_size_part1 AS FLOAT) DESC");

这将减慢查询速度,因为MySQL将无法使用索引进行排序,使用函数可以防止这种情况。

更好的解决方案(如果可能)sku-size_part1重新定义为小数(10,2)。

-- Make a backup first --
ALTER TABLE sku_data CHANGE sku_size_part1 DECIMAL(10,2); 

(确保第一个参数(10)和第二个参数(2)足够大以容纳所有可能的值。)
请参阅:http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html