2013-06-18 2 views
0

두 개의 MySQL 테이블이 있습니다. 첫 번째 테이블에는 5 분마다 업데이트되는 cron 작업이 실행됩니다. cron 작업이 실행되면 첫 번째 테이블의 모든 데이터를 두 번째 테이블 (아카이브 테이블)로 이동하고 첫 번째 테이블을 자른 다음 특정 URL에서 지속적으로 업데이트되는 CSV 파일에서 정보를 업데이트합니다. 한 테이블에서 다른 테이블로 구조를 복사하여 테이블을 만들었습니다 (그래서 구조가 동일합니다).중복 키를 무시하면서 한 테이블에서 다른 테이블로 데이터 삽입

$sql = " 
INSERT INTO table2 (id, time, size, location, county, state, lat, lon, comments) 
SELECT id, time, size, location, county, state, lat, lon, comments FROM table1"; 
$result = $mysqli->query($sql); 

문제는, 크론 작업이 너무 자주는 항상 표 2에 중복 된 항목을 만들 것 때문에 완전히 업데이트 할 수 없을거야 것을 실행 :

여기에 작동 내가 실행 해요 코드,입니다. 여기 내가 사용하려고했던 코드는하지만, 작동하지 않는 것 : 나는 확실히했습니다

$sql = " 
INSERT INTO table2 (id, time, size, location, county, state, lat, lon, comments) 
SELECT id, time, size, location, county, state, lat, lon, comments FROM table1 
ON DUPLICATE KEY UPDATE id=id 
"; 
$result = $mysqli->query($sql); 

두 테이블의 키는 동일 (ID)입니다.

이 작업이 함께 작동하지 않거나 구문이 어딘가에 잘못 표시됩니까? 이 작업을 테이블을 업데이트하는 대신 한 번에 실행하고 이후에 중복 작업을 제거하기 위해 다른 작업을 실행하려고했습니다.

도움 주셔서 감사합니다.

답변

0

삽입 무시 쿼리를 사용하면 데이터 중복을 피할 수 있습니다. 그러나 최대 항목을 선택할 때마다. 언젠가 가능성이 방법을 따를 수

$sql = " 
INSERT IGNORE INTO table2 (id, time, size, location, county, state, lat, lon, comments) 
SELECT id, time, size, location, county, state, lat, lon, comments FROM table1"; 

표에서 새 항목을 절단하기 위해 존재 $ primary_id = last_updated_primary_key;

//add where condition int the where query 
$sql = " 
INSERT INTO table2 (id, time, size, location, county, state, lat, lon, comments) 
SELECT id, time, size, location, county, state, lat, lon, comments FROM table1 WHERE id> <last_updated_primary_key>"; 

기본 기존 키

DELETE FROM table1 WHERE id < last_updated_primary_key; 

덮어 사용하여 이전 항목을 삭제 최신 기본 키

$primary_id = last_updated_new_primary_key; 
당신은 한 테이블에서 다른 테이블로 동적으로 새 항목을 업데이트하는 트리거를 사용할 수 있습니다

http://dev.mysql.com/doc/refman/5.0/en/triggers.html

관련 문제