Php 带数字的MySQL查询排序
我有以下疑问:Php 带数字的MySQL查询排序,php,mysql,sorting,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 = $resu
$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\u size\u 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\u part1
重新定义为十进制(10,2)
(确保第一个参数(10)和第二个参数(2)足够大,可以容纳所有可能的值。)请参阅:让我猜SKU大小零件1是文本…错误:-[.SKU大小零件1的数据类型是什么??SKU大小零件1的类型是什么?是的,你们是对的。它是一个varchar(6)。这是我们从一家公司购买的一个大型轮胎数据库:-\n这很有效,但如果Drew将表列更改为十进制,那就更好了。过去,当我不得不这样做时,我在数据库中添加了一个新列,以便保留原始数据以防万一。您可以尝试
更改表sku\U数据添加列sku\u size\u part1\u dec DECIMAL NULL;
然后您可以执行更新:更新sku\u数据集sku\u size\u part1\u dec=CAST(sku\u size\u part1为十进制)
-- Make a backup first --
ALTER TABLE sku_data CHANGE sku_size_part1 DECIMAL(10,2);