2011-12-22 2 views
0

mysql 데이터베이스에 삽입 할 데이터가 들어있는 xml 파일이 있습니다. 이제는 이미 내 데이터베이스에 항목이 있으므로 업데이트해야하며 기존 항목을 추가해서는 안되며 문제가 발생합니다. 데이터베이스에는 있지만 XML에는없는 항목은 삭제해야합니다. 그래서 예를 $array_new["some1"] = "test"; $array_new["some2] = "test2";배열에없는 모든 요소를 ​​mysql 데이터베이스에서 삭제하는 방법은 무엇입니까?

지금 $array_old["some1"] = "something"; $array_old["some2"] = "test2";

같은 이전 데이터를 포함하는 다른 하나 나는이 둘을 비교하고 싶은, 그래서 하나는 XML 데이터의 일부 비교 값을 포함, 2 개 배열을 만드는 시도 무엇 배열에 저장하고 두 배열에없는 모든 값을 새 배열에 추가합니다. 나는 array_diff를 사용해 보았습니다. 그러나 이것은 새로운 어레이에 두 배열에없는 하나의 값을 추가 할뿐입니다. 그러나 새로운 배열에 동일한 키를 가진 모든 값을 가져야 만 삭제할 수 있습니다.

누구든지이 작업을 수행하는 방법을 알고 있습니까? 감사!

답변

3

같은 것을에만 식별자를 만들 수있다 'not in'를 사용하여 where 절을 생성하고 XML 데이터가 동일한 키 데이터를 사용할 수 있는지, 다음 단계를 수행

DELETE FROM tablename WHERE unique_field NOT IN (<comma seperated list or keys>) 

2) DUPLICATE KEY UPDATE 유형의 쿼리 ... INSERT를 실행합니다 :

1) 배열에없는 테이블에서 모든 기록을 삭제

INSERT INTO tablename VALUES (a, b, c) ON DUPLICATE KEY UPDATE field1 = a, ... 
+0

고맙습니다. 그런 다음 implode (",", $ array)를 NOT IN, couldnt 뒤에 추가 할 수 있습니까? – phpheini

+0

예, 필자는 사용해야 할 SQL 문만 보여 주려고했습니다. 데이터 소스에 따라 다르기 때문에 쉼표로 구분 된 고유 키 목록을 가져 오는 방법에 대해 자세히 설명하지 않았습니다. 고유 한 키 값만 포함하는 배열이있는 경우 NOT IN()의 내부에 implode (",", $ array) –

0

, 당신의 테이블이 고유 인덱스 (기본 키)가 있다고 가정 implode(",", $array)

관련 문제