1

任何人都知道如何获得数字的总和?

例如我有 mysql 列名包。

Package
3
4
1
3
4

如果是包裹 3,价值应该是 5 美元,如果是包裹 4,价值应该是 10 美元,如果是包裹 1,价值应该是 1 美元,以此类推。

所以上面的总值应该是 => 5 + 10 + 1 + 5 + 10 = 31

那么我如何在php中得到它的总和?

我试过array_sum ..但它给了我错误,我不是很擅长php ..请帮助我

提前致谢。

4

3 回答 3

6

获取数据库来完成这项工作:

select sum(CASE WHEN package = 3 THEN 5 ELSE 0 END)
       + sum(CASE WHEN package = 4 THEN 10 ELSE 0 END)
       + sum(CASE WHEN package = 1 THEN 1 ELSE 0 END) AS total
from table_name

正确的做法是,如果您有多个值,请修改表格以包含金额字段,以便您可以执行以下操作:

select sum(amount) from table_name

或者有另一个表包含值之间的关系(包,金额),然后执行

select sum(package_amount) 
from table_name, lookup_values
where table_name.package = lookup_values.package

或者,如果您真的想在 PHP 中执行此操作:

$amount = array(3=>5, 4=>10, 1=>1);  // define the amount of each value
$result = mysql_query("SELECT id FROM table_name");
$sum = 0;

while ($row = mysql_fetch_assoc($result))
{
    $sum += $amount[ $row['id'] ];
}
于 2009-01-18T09:05:15.127 回答
1

您可以像 Richard 那样在纯 SQL 中执行此操作,PHP 版本将类似于:

$result = mysql_query("SELECT `number` FROM `packages`");

while ($row = mysql_fetch_assoc($result))
{
    $curr = $row['number'];
    if ($curr == 3) $sum += 3;
    if ($curr == 4) $sum += 10;
    if ($curr == 1) $sum++;
}

这是假设您的数据库表名为“packages”并且具有不同包号的列称为“number”。在循环结束时,您将得到 $sum 变量中的总和。不确定这是否一定是在 PHP 中执行此操作的最有效方法。

于 2009-01-18T09:15:14.873 回答
1

我认为在 PHP 中一个更简洁的方法是声明一个关联的权重数组,这将数据与算法分开:

$weight=array(
  1=>1,
  3=>3,
  4=>10
);

$result = mysql_query("SELECT `number` FROM `packages`");

$sum=0;
while ($row = mysql_fetch_assoc($result))
{
    $n = $row['number'];
    if (isset($weight[$n])) 
    {
         $sum+=$weight[$n];
    }
    else
    {
          #handle error somehow, maybe with a default weight
          die("Unexpected value $n");
     }
}

一个更好的选择是让这个完全由数据驱动,并将你的权重放在一个表中

#create and populate the weights table
create table weight (number int, weight int, primary key(number));
insert into weight (number,weight) values (1,1),(3,3),(4,10);

#figure out total weight
select sum(weight) from package inner join weight using(number);

使用数据库中的权重,您可以提供一个 UI 以允许您的应用程序的用户调整权重。

于 2009-01-18T10:30:18.167 回答