<?
$tablae = mysql_query("SELECT * FROM order_history where (type!='rent_referral' AND type!='rental_balance') AND date>'" . strtotime($time1) . "' AND date<'" . strtotime($time2) . "' GROUP BY user_id");
while ($order = mysql_fetch_array($tablae)) {
?>
<tr>
<?
$tablaes = mysql_query("SELECT * FROM members where id='$order[user_id]'");
$user = mysql_fetch_array($tablaes);
$idsd=$user['id'];
$rPaid=mysql_query("SELECT SUM(`price`) AS total FROM order_history WHERE (type!='rent_referral' AND type!='rental_balance') AND date>'" . strtotime($time1) . "' AND date<'" . strtotime($time2) . "'");
$hdPaid = mysql_fetch_array($rPaid);
$sPaid=mysql_query("SELECT SUM(`price`) AS total FROM order_history WHERE user_id='$idsd' AND (type!='rent_referral' AND type!='rental_balance') AND date>'" . strtotime($time1) . "' AND date<'" . strtotime($time2) . "'");
while ($hPaid = mysql_fetch_array($sPaid)) {
?>
<td><?=$user['username']?></td>
<td><?=$hPaid['total']?></td>
<?
}
?>
</tr>
<? } ?>
这给了我这个结果 http://dl.dropbox.com/u/14384295/test.jpeg
我想按 DESC 排序总价。
我需要
$sPaid=mysql_query("SELECT SUM(`price`) AS total FROM order_history WHERE user_id='$idsd' AND (type!='rent_referral' AND type!='rental_balance') AND date>'" . strtotime($time1) . "' AND date<'" . strtotime($time2) . "'");
由 DESC 订购的总数。
最佳答案
在 SQL 查询中使用 GROUP BY 指令时要非常小心。结果中的所有列并且不是聚合表达式(表达式是在组上而不是在行上工作的计数、SUM、最大值等)应该在您的 group by 表达式中; 这里您使用了 select *,您应该尝试列出真实的列,并在您的分组依据中获取此列表,或者仅使用 SELECT user_id。
大多数数据库都会阻止您运行这种格式不正确的分组查询,但 MySQl 不会保护您,这并不意味着如果您不期望此规则,他不会给您完全错误的结果(所有非聚合列必须位于分组依据中)。
然后,您应该能够通过在 order 子句中重用该表达式而不是其别名来按聚合表达式进行排序。
关于php - 使用 Total For Sum 函数排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4510531/