有人知道如何求和吗?
例如,我有mysql列名为package。
Package
3
4
1
3
4如果是package 3,值应该是usd 5;如果是package 4,值应该是usd 10;如果是package 1,值应该是usd 1,依此类推。
所以上面的总值应该是=> 5+ 10 +1+5+ 10 = 31
那么如何在php中获得它的总和呢?
我试过array_sum ..但是它给了我错误,我对php不是很精通..请帮帮我
提前道谢。
发布于 2009-01-18 09:05:15
让数据库来做这项工作:
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如果您有多个值,正确的方法是修改表,使其包含amount字段,这样您就可以:
select sum(amount) from table_name或者,使用另一个表,其中包含值之间的关系(package,amount),然后执行
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-18 09:15:15
你可以像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变量中保留sum。我不确定这是否一定是PHP中最有效的方法。
发布于 2009-01-18 10:30:18
我认为在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来允许应用程序的用户调整权重。
https://stackoverflow.com/questions/454836
复制相似问题