PHP/Mysql:优化查询


PHP/Mysql: optimize query

我有以下脚本,可以从 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);

我需要在一年中的每个月运行相同的脚本。除了从 1 更改为 12 的变量"month"和 UPDATE 中的 SET(其中每个月的值都上传)("一月"、"二月"、"月"......等)

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

参见 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 - 一个月的简短文本表示,1 月至 12 月的三个字母

一个月作为短文本,我使用 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);
}