我有以下查询:
$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,以此类推。
我能做些什么来实现这一点?
您需要将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