PHP/Mysql:优化查询

PHP/Mysql:优化查询,php,mysql,mysqli,Php,Mysql,Mysqli,我有下面的脚本,它从2个表中检索数字,求和,然后将值更新到第3个表中 $query = "SELECT (SELECT SUM(net_amount) FROM fin_costos WHERE month='1' AND group_of_costos='general' AND year_analysis='2014' ) + (SELECT SUM(net_amount) FROM em2_fin_costs WHERE month='1' AND group_of_costos='ge

我有下面的脚本,它从2个表中检索数字,求和,然后将值更新到第3个表中

$query = "SELECT (SELECT SUM(net_amount) FROM fin_costos WHERE month='1' AND group_of_costos='general' AND year_analysis='2014' ) + 
(SELECT SUM(net_amount) FROM em2_fin_costs WHERE month='1' AND group_of_costos='general' AND year_analysis='2014') AS total";

$result = mysqli_query($mysqli,$query);

while($row = mysqli_fetch_array($result)){$valor_final = $row['total']; }

$query_update="UPDATE fusion_analysis SET jan='$valor_final' WHERE year_for_analysis='2014' AND item_for_analysis='general' AND category='general'"; 
$result = mysqli_query($mysqli,$query_update);
我需要为一年中的每个月运行相同的脚本。除了变量'month'从1变为12,以及在更新中设置的每月上载值('jan'、'feb'、'mar'…等)之外,所有内容都完全相同


我目前只是复制和粘贴同一个脚本来更改这几个参数,但我相信有一种更聪明的方法可以用更少的代码行来实现这一点

请参见PHP的日期函数:

$query = "SELECT (SELECT SUM(net_amount)"
    . " FROM fin_costos"
    . " WHERE month='".date('n')."'"
    ." AND group_of_costos='general' AND year_analysis='".date("Y")."' ) +"
    ."(SELECT SUM(net_amount) FROM em2_fin_costs WHERE month='".date('n')."'"
    . " AND group_of_costos='general' AND year_analysis='".date("Y")."') AS total";

$query_update="UPDATE fusion_analysis"
    . " SET `".  strtolower(date('M'))."`='$valor_final'"
    . " WHERE year_for_analysis='".date("Y")."'"
    . " AND item_for_analysis='general'"
    . " AND category='general'"; 
注意:

Y
-一年的完整数字表示,4位数字,如2014年

n
-月份的数字表示,不带前导零1-12

M
-一个月的简短文本表示,三个字母从一月到十二月

在短短的一个月里,我使用了
strtolower
函数使其小写

更新

根据OP评论:

for ($i = 1; $i <= 12; $i++) {
    $query = "SELECT (SELECT SUM(net_amount)"
        . " FROM fin_costos"
        . " WHERE month='" . $i . "'"
        . " AND group_of_costos='general' AND year_analysis='" . date("Y") . "' ) +"
        . "(SELECT SUM(net_amount) FROM em2_fin_costs WHERE month='" . $i . "'"
        . " AND group_of_costos='general' AND year_analysis='" . date("Y") . "') AS total";

    $result = mysqli_query($mysqli, $query);
    $row = mysqli_fetch_assoc($result);

    $valor_final = $row['total'];

    $monthName = strtolower(date('M', strtotime(date("Y") . "-" . str_pad($month,2, "0", STR_PAD_LEFT) . "-" . date("01") )));

    $query_update = "UPDATE fusion_analysis"
        . " SET `" . $monthName . "`=' " . $valor_final . "'"
        . " WHERE year_for_analysis='" . date("Y") . "'"
        . " AND item_for_analysis='general'"
        . " AND category='general'";
    mysqli_query($mysqli, $query_update);
}

用于($i=1;$i谢谢。根据我所看到的,这将只在当前月份运行更新。如果日期是(例如)8月,但用户从1月开始更改成本,会发生什么情况。然后,此成本将不会更新。然后,您需要在页面上创建一个表单,用户可以在其中设置日期。但是您编写了以下内容:
我需要为每个月运行相同的脚本一年中的每个月。
确实如此,但问题是脚本应该同时运行12个月,无论使用日期如何。这是否意味着,您希望在每个月使用相同的
$valor_final
,运行更新查询1-12个月,还是希望选择1-12并更新1-12?我不太明白。我想要运行查询并一次性更新12个月。$valor_最终根据变量'months'进行更改。该页面将显示全年的值。我希望它解释得更清楚一些。