2014-12-03 3 views
0

У меня есть следующий скрипт, который извлекает числа из 2 таблиц, суммирует и значение обновляется в 3-й таблице.PHP/Mysql: оптимизировать запрос

$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, и SET в UPDATE, где значение загружается за каждый месяц («jan», «feb», «mar» и т. Д.)

в настоящее время я просто скопировать и вставить тот же сценарий, изменяя эти несколько параметров, но я считаю, что есть более разумный способ сделать это в менее строки коды у меня есть

ответ

0

См дата функция 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, чтобы сделать ее строчной.

UPDATE

на основе ОП комментарий:

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); 
} 
+0

Спасибо. Для того, что я вижу, это приведет к обновлению только для текущего месяца. Что произойдет, если дата - например, август, но пользователь меняет стоимость с января. Тогда эта стоимость не будет обновлена. – user2952715

+0

Затем вам нужно создать форму на странице, где пользователь может установить дату. Но вы написали это: «Мне нужно запустить тот же скрипт для каждого месяца в году. ' – vaso123

+0

точно, но дело в том, что сценарий должен запускаться в течение 12 месяцев одновременно, независимо от даты использования. – user2952715

Смежные вопросы