2016-10-09 8 views
1

こんにちは仲間:) DBに格納されている一部のワーカーデータを処理するためにPHPコードを作成する必要がありました。私は望みの結果を得ましたが、秒と秒(秒と秒!>。<)が完了するので、私は正しい方法で何かをやっていません:(テーブルから別のレコードにレコードをコピーするときのパフォーマンスを改善

労働者のデータが保存されていますMySQLのテーブル内(TABLE1)、このような何か:

enter image description here

私は日付のペアを与えている:initial_date(a)とfinal_date(B)を、私の目標は、コピーすることですので、与えられた労働者のデータを新しいテーブル(table2)にaからbへと日ごとに更新する。期待されるテーブルは以下の通りでなければならない(このテーブルは後で質問の一部ではない更なる操作のための基礎、)

enter image description here

ように、それはaとbの日付、および「ジャンプ」週末と祝日の間で既存のデータを上書きするための要件です。

が私の目標を取得するには、私はこれが(の接続とすべてのことが行われているとはcheckworkingday機能が与えられていると仮定する)をコードしています:

$initialdate = '2016-10-10'; 
$finaldate = '2016-10-12'; 

$x = $initialdate; 

do { 
    if (checkworkingday($x) == true) { 
    $query = mysqli_query($connection,"SELECT name,task FROM table1"); 
    while($row = mysqli_fetch_array($query)) { 
     $task = $row['task']; 
     $worker = $row['name']; 
     $query2 = mysqli_query($connection,"SELECT task FROM table2 WHERE name = '$worker' AND date = '$x'"); 
     $row2 = mysqli_fetch_array($query2); 
     $existingtask = $row2['task']; 
     if (!isset($existingtask)) { 
      mysqli_query($connection,"INSERT INTO table2 (date,name,task) VALUES('".$x."','".$worker."','".$task."')"); 
     } else { 
      mysqli_query($connection,"UPDATE table2 SET task = '".$task."' WHERE date = '".$x."' AND worker = '".$name."'"); 
     } 
    } 
    } 
    $x = date('Y-m-d', strtotime($x . "+1 day")); 
} while ($x <= $finaldate); 

わずか3日間の例に示すように、終わりには時間がかかります。数週間または数ヶ月間、非常に長い時間がかかります(日付の範囲によっては最大実行時間を超えても!)。

私は初心者であり、コードはかなり素朴であることを知っていますが、コードと情報を改訂してチェックしました。私は間違って何をしていますか?感謝:)代わりenitreデータをループの

+0

申し訳ありませんが、私がチェックしている別の要件を忘れてしまったとbの間の日は、週末や祝日されていないです。ちょうど編集されました。 – b1919676

答えて

0

は、INSERT.. SELECTを試してみてください。

INSERT INTO table2 (date,name,task) 
SELECT date,name,task 
FROM Table1 
WHERE < >; 
+0

ありがとうサギ!私はちょうど私がもう一度requeriement(就業日をチェックする)を忘れたので、投稿を編集しました。 – b1919676

+0

@ b1919676私たちはそれが働く日であることをどのように知っていますか? – sagi

+0

投稿に記載されているように、checkworkingdayは与えられた関数です(投稿をもっと複雑にするのを避けるため)。その日が作業日であれば真であると仮定しましょう。そうでなければ偽を返します:) – b1919676

関連する問題