PHP/Mysql:优化查询
我有下面的脚本,它从2个表中检索数字,求和,然后将值更新到第3个表中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
$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'进行更改。该页面将显示全年的值。我希望它解释得更清楚一些。