【问题标题】:Order by Total For Sum function used使用的 Sum 函数按总计排序
【发布时间】:2010-12-22 15:09:43
【问题描述】:
    <?
$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 排序的总数。

【问题讨论】:

  • 将非日期传递给您的脚本会导致查询失败。如果你有错误,我可能会得到你的表名和更多信息,我可以用来更直接地攻击。
  • 脚本中指定了日期...这不是我发布的整个页面。

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


【解决方案1】:

在您的 SQL 查询中使用 GROUP BY 指令时要非常小心。结果中且不是聚合表达式的所有列(表达式将是在组上而不是在行上工作的计数、总和、最大值等)应该按表达式在您的组中; 在这里您使用选择 *,您应该尝试列出真正的列,并在您的组中获取此列表,或者仅使用 SELECT user_id。

大多数数据库会阻止您通过查询运行这种格式不正确的分组,但 MySQl 并没有保释您,这并不意味着如果您不遵守此规则,他不会给您完全错误的结果(所有不是聚合的列都必须在 group by 中)。

那么你应该能够通过在 order 子句中重用这个表达式而不是他的别名来按聚合表达式排序。

【讨论】:

  • $tablae = mysql_query("SELECT user_id,price FROM order_history where (type!='rent_referral' AND type!='rental_balance') AND date>'" .strtotime($time1) ."' AND 日期
  • 那么您应该 GROUP BY user_id,price 或执行 SELECT user_id,SUM(price) 以仅获取 GROUP BY user_id。
【解决方案2】:

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

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

但我无法真正遵循 $rPaid、$hPaid 和 $sPaid 的逻辑,所以我无法在这方面为您提供帮助。

【讨论】:

  • $rPaid 用于定义总计.. 未包含在发布的代码中.. 您可以发布一些指向任何 jQuery 插件的链接吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-16
  • 1970-01-01
  • 2018-10-10
  • 2023-03-12
  • 2023-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多