Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 带数字的MySQL查询排序_Php_Mysql_Sorting - Fatal编程技术网

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);