2016-10-09 4 views
1

안녕 친구 : DB에 저장된 일부 직원의 데이터를 처리하기 위해 PHP 코드를 만들어야했습니다. 원하는 결과를 얻었지만 몇 초 (초 및 초!> .<)가 끝나기 때문에 올바른 방법으로 뭔가를하지 않을 것입니다. (테이블에서 다른 테이블로 레코드를 복사 할 때 성능 향상

노동자 데이터가 저장됩니다. MySQL의 테이블 (표)이 같은 뭔가 :

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

미안 해요, 확인하는 또 다른 요구 사항을 잊어 a와 b 사이의 일이 주말이나 휴일되지이다. 방금 편집했습니다. – b1919676

답변

0

INSERT.. SELECT을 시도 :

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

감사합니다. 나는 한 번 더 requreiement (check working day)를 잊었 기 때문에 그 글을 편집했다. – b1919676

+0

@ b1919676 작업 일인지 어떻게 알 수 있습니까? – sagi

+0

게시물에 명시된 바와 같이 checkworkingday는 주어진 기능입니다 (게시물을 더 복잡하게 만들지 않기 위해). 그 날이 근무일이라면 우리에게 사실이라고 가정합시다. – b1919676