首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自mysql的php求和值

来自mysql的php求和值
EN

Stack Overflow用户
提问于 2009-01-18 08:59:39
回答 3查看 15.6K关注 0票数 1

有人知道如何求和吗?

例如,我有mysql列名为package。

代码语言:javascript
复制
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不是很精通..请帮帮我

提前道谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-01-18 09:05:15

让数据库来做这项工作:

代码语言:javascript
复制
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字段,这样您就可以:

代码语言:javascript
复制
select sum(amount) from table_name

或者,使用另一个表,其中包含值之间的关系(package,amount),然后执行

代码语言:javascript
复制
select sum(package_amount) 
from table_name, lookup_values
where table_name.package = lookup_values.package

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

代码语言:javascript
复制
$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'] ];
}
票数 6
EN

Stack Overflow用户

发布于 2009-01-18 09:15:15

你可以像Richard那样用纯SQL实现,PHP版本应该是这样的:

代码语言:javascript
复制
$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中最有效的方法。

票数 1
EN

Stack Overflow用户

发布于 2009-01-18 10:30:18

我认为在PHP中更好的方法是声明一个权重的关联数组,这将数据从算法中分离出来:

代码语言:javascript
复制
$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");
     }
}

一个更好的替代方法是让这一切完全由数据驱动,并将权重放在一个表中

代码语言:javascript
复制
#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来允许应用程序的用户调整权重。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/454836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档