У меня есть следующий запрос:
$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/ru/cast-functions.html.