PHP/MySQL : optimize query

标签 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='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 以及 UPDATE 中的 SET(其中上传每个月的值(“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 - 月份的简短文本表示,三个字母 Jan 到 Dec

对于短文本月份,我使用了 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);
}

关于PHP/MySQL : optimize query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27270228/

相关文章:

php - 无法找出 LEFT JOIN 来从左表中获取所有内容,并且不重复 MYSQLI 中右表的结果

php - 如何在 PHP 中动态定义一个变量

php - 您可以在 PHP 中强制实现架构层依赖性吗?

javascript - 如何使用javascript转义echo中的php代码

javascript - WHERE 子句中的多个列

php - num_rows 在 php/mysqli 中不起作用

javascript - 如何在javascript中检查php数组的长度

mysql - 选择有 3 条或更多评论的文章

mysql - 如何在不扫描所有行的情况下在我的索引列上使用查询限制?

php - 使用 mysqli 或 PDO 时无法通过 PHP 脚本连接到 MySQL 但 mysql 可以工作