0

好的,所以我的查询是这样的:

select distinct `rate_id`, `p_id`, p_rate from shipping_rates inner join products_to_categories ptc inner join customers_basket cb on ptc.products_id = cb.products_id where cb.customers_id='1' and p_status = '1' and p_free = '0' group by p_id

返回

rate_id   p_id  p_rate

1       1        10.00


2       22       11.00

这就是我想要的但是当我将它添加到一个数组时

 $p_rate[] = $sInfo->p_rate;
 $rate = array_sum($p_rate); 

这会返回 10.00 而不是 21.00

顺便说一下,这是我的 objectInfo 类代码

    function objectInfo($object_array) {
      reset($object_array);
      while (list($key, $value) = each($object_array)) {
        $this->$key = tep_db_prepare_input($value);
      }
    }
  }
}

下面的代码是

 $sRate = tep_db_fetch_array($status_query); 
  if ($sRate !=''){//error checking for empty query
      $sInfo = new objectInfo($sRate);
   }

trp_db_fetch_array() 只是一个调用 mysql_fetch_array 的函数

4

3 回答 3

0

$sInfo 仅包含一行。您需要先获取整个结果集。

您似乎使用了框架而不是本机 php 函数。出于这个原因,我无法提供用于执行此操作的代码。

获得结果集后,您可以使用:

foreach($sInfoTable as $sInfo){
    $p_rate[] = $sInfo->p_rate;
}
$rate = array_sum($p_rate); 
于 2013-08-28T21:52:12.017 回答
0

好的,所以我通过狩猎和啄食找到了答案,这里是查询

 $status_query = tep_db_query("select  `rate_id`, `p_id`, `p_rate`, cb.customers_id from " . TABLE_SHIPPING_RATES ." inner join ". TABLE_PRODUCTS_TO_CATEGORIES . " ptc inner join ". TABLE_CUSTOMERS_BASKET . " cb on cb.products_id = p_id where cb.customers_id='" . $customer_id ."' and p_status = '1' and p_free = '0' group by cb.customers_id,p_id");

这是我得到所有行的地方:

while($row = mysql_fetch_assoc($status_query)){
 $p_rate[] = $row["p_rate"];

}

这是我总结行的地方:

$rate = array_sum($p_rate);

所以现在这不需要计算行数等等,而且更干净

于 2013-08-29T17:38:31.110 回答
0

你在 fetch 循环里面做 array_sum() 吗?例如

while($sInfo = fetch_from_db($result)) {
    $p_rate[] = $sInfo->p_rate;
    $rate = array_sum($p_rate);
}

? 如果是这样,那么您必须将总和移到循环之外,因此只有在您从数据库中检索到所有数据后才会进行汇总:

while($sInfo = fetch_from_db($result)) {
    $p_rate[] = $sInfo->p_rate;
}
$rate = array_sum($p_rate);
于 2013-08-28T21:29:00.007 回答