PHP & MYSQL 按小数列排序

PHP & MYSQL Order By Decimal Column

我 运行 一个非常简单的 MySQL 查询并尝试按销售价值对数据进行排序...数据库中的列设置为 decimal(16,2) 但是当返回的数据未按任何顺序排序。

这是我的代码:

$query = "
SELECT *
     , SUM(sale_value) 
  FROM sale 
 WHERE week_no = $today
 GROUP  
    BY user_id 
 ORDER 
    BY sale_value DESC
"; 

$result = mysql_query($query) or die(mysql_error());
// Print out result
while($row = mysql_fetch_array($result)){
 echo "Total ". $row['user_id']. " = £". $row['SUM(sale_value)'];
echo "<br />";
}

这是我得到的结果:

Total 14 = £2195.77
Total 62 = £865.01
Total 52 = £2989.53
Total 42 = £2689.47
Total 51 = £894.51
Total 48 = £962.09
Total 39 = £1161.43
Total 33 = £1341.49
Total 1 = £5989.57
Total 8 = £4937.48
Total 59 = £1377.70
Total 32 = £3063.06
Total 41 = £1937.82
Total 60 = £2981.01
Total 53 = £1050.21
Total 46 = £1836.05
Total 57 = £310.43
Total 19 = £2534.92
Total 5 = £1946.01
Total 56 = £471.00
Total 7 = £865.00
Total 2 = £754.30

谁能发现我做错了什么?

您在匹配行中按任意值排序,而不是总和。给该列一个别名并使用它:

SELECT *, SUM(sale_value) as total_sale_value
FROM sale
WHERE week_no = ".$today."
GROUP  BY user_id
ORDER By total_sale_value DESC;

顺便说一下,select *group by 一起使用是一个非常、非常、非常糟糕的主意。您应该明确列出用于定义每个聚合组的列:

SELECT user_id, SUM(sale_value) as total_sale_value
FROM sale
WHERE week_no = ".$today."
GROUP BY user_id
ORDER By total_sale_value DESC;

你应该order by SUM(sale_value)而不是sale_value