2011-10-04 51 views
1

排序我有以下查詢:MySQL查詢與數字

$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等。

我該怎麼做才能做到這一點?

+2

讓我猜猜SKU_SIZE_PART1是文本。錯錯了: - [。 – JonH

+1

「SKU_SIZE_PART1」的數據類型是什麼? –

+0

SKU_SIZE_PART1的類型是什麼? –

回答

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

+3

這可以起作用,但是如果Drew將表格列更改爲小數,那麼代替投射,效果會更好。 – Kelly

+0

在過去,當我不得不這樣做時,爲了保留原始數據,我在數據庫中添加了一個新列。您可以嘗試 'ALTER TABLE sku_data ADD COLUMN sku_size_part1_dec DECIMAL NULL;' 然後您可以進行更新: 'UPDATE sku_data SET sku_size_part1_dec = CAST(sku_size_part1 AS DECIMAL)' – Andrew