Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php中mysql的求和值_Php_Mysql_Sum - Fatal编程技术网

php中mysql的求和值

php中mysql的求和值,php,mysql,sum,Php,Mysql,Sum,有人知道如何得到这个数的和吗 例如,我有mysql列名包 Package 3 4 1 3 4 如果是包3,价值应为5美元,如果是包4,价值应为10美元,如果是包1,价值应为1美元,依此类推 所以上面的总值应该是=>5+10+1+5+10=31 那么如何在php中得到它的总和呢 我试过了。。但是它给了我一个错误,我不是很精通php。。请帮帮我 提前感谢。获取数据库以完成工作: select sum(CASE WHEN package = 3 THEN 5 ELSE 0 END) +

有人知道如何得到这个数的和吗

例如,我有mysql列名包

Package
3
4
1
3
4
如果是包3,价值应为5美元,如果是包4,价值应为10美元,如果是包1,价值应为1美元,依此类推

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

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

我试过了。。但是它给了我一个错误,我不是很精通php。。请帮帮我


提前感谢。

获取数据库以完成工作:

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
或者,使用另一个表,其中包含值(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'] ];
}

获取数据库以执行此工作:

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
或者,使用另一个表,其中包含值(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'] ];
}

您可以像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中执行此操作的最有效方法。

您可以像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中执行此操作的最有效方法。

我认为在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,允许应用程序的用户调整权重。

我认为在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,允许应用程序的用户调整权重。

除非您可以从数据库的另一个表/字段中提取权重,否则我将使用此选项,而不是在SQL中使用CASE语句硬编码值。除非您可以从数据库的另一个表/字段中提取权重,否则我将使用此选项选项,而不是在SQL中使用CASE语句硬编码值。这是一个非常丑陋的解决方案,它不会扩展,并且很难更改/维护。如果不能从另一个表/字段中获得权重(如包3中的5)(这将导致更干净的SQL)有时,对于一些值,最好使用我描述的方法在SQL中进行计算——这样,如果你决定添加一个表,PHP代码保持不变,你只需更改SQL……richard,我有没有提到过你是天才?你的第三条路很有魅力。非常感谢,伙计。这是一个非常丑陋的解决方案,它不会扩展,而且很难更改/维护。如果不能从另一个表/字段中获得权重(如包3中的5)(这将导致更干净的SQL)有时,对于一些值,最好使用我描述的方法在SQL中进行计算——这样,如果你决定添加一个表,PHP代码保持不变,你只需更改SQL……richard,我有没有提到过你是天才?你的第三条路很有魅力。非常感谢,伙计。