按总数排序使用的总和功能

时间:2010-12-22 15:09:44

标签: php mysql sql-order-by auto-increment autonumber

    <?
$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订购的总数。

2 个答案:

答案 0 :(得分:1)

要非常小心SQL查询中的GROUP BY指令。结果中的所有列都不是聚合表达式(表达式将是计数,SUM,max等工作在组而不是行上)应该在表中按组表示; 在这里你使用select *,你应该尝试列出真实的列,并在你的组中获取这个列表,或者只使用SELECT user_id。

大多数数据库都会阻止你通过查询运行这样一个非常好的组织,但是MySQl并没有让你失望,这并不意味着如果你不反对这个规则,他不会给你完全错误的结果(所有不是聚合的列必须在组中。)

然后你应该能够通过重复使用这个表达式而不是他在命令子句中的别名来通过agregate表达式进行排序。

答案 1 :(得分:0)

你可以使用javascript进行客户端排序,有一些不错的jQuery插件可以做到这一点。

或者你必须完全重写你的代码以使用连接和分组的单个sql。

但我不能真正遵循$ rPaid,$ hPaid和$ sPaid的逻辑,所以我无法帮助你。