2012-06-18 4 views
0

중복 테이블을 한 테이블에서 확인하고 다른 테이블에서 삭제하려고합니다. 영원히 멈추고 궁극적으로 500 개의 내부 오류가 발생합니다. 다음은 PHP에서 내 원래의 방법이었다PHP/mysql - 매우 큰 테이블에서 중복 체크가 걸려 넘어짐

$sql_2 = "SELECT account_no FROM customersTable"; 
$result_2 = mysql_query($sql_2) or die("Error: " . mysql_error() . "<br>"); 
while(list($acct) = mysql_fetch_row($result_2)) { 
    $sql_delete = "DELETE FROM tempTable WHERE(account_no = '$acct')"; 
    $result_delete = mysql_query($sql_delete) or die("Error: " . mysql_error() . "<br>"); 
} 

가 그때 대신 위의 스크립트의 다음과 같은 쿼리를 시도, 모든 걸 :

DELETE FROM tempTable WHERE account_no IN (SELECT account_no FROM tempTable) 

DELETE FROM tempTable USING tempTable, customersTable ct WHERE tempTable.account_no=ct.account_no 

을이 모두 20 정지 분 이상이 소요되고 마지막으로 내부 서버 오류가 발생합니다. "요청이 완료되지 않았습니다. 서버가 예기치 않은 조건을 만났습니다."

PHP를 포함하지 않거나 캐싱, 일괄 처리 또는 어떤 작업이든 상관없이 모든 솔루션에 열려 있습니다.

+0

안녕하세요있다. 이 호출에 대한 PHP 로그를 게시 할 수 있습니까? 500 에러 코드가 정확히 무엇인지 검사하는 것이 도움이 될 수 있습니다. – brainondev

+0

기록하지 않은 것 같습니다. –

+0

사본을 보관하지 않고 반복되는 값만 삭제 하시겠습니까? – jcho360

답변

1

당신은 MySQL의 측면을 실행하도록 시도 할 수 :

DELETE tempTable 
FROM customersTable 
JOIN tempTable 
ON customersTable.account_no = tempTable.account_no; 
+0

이렇게하면 customersTable의 레코드가 삭제되지 않습니까? –

+0

아니요, 단지 'tempTable' (모든 것이 _ 제거되기 전에'FROM '은 삭제 된 테이블입니다). als [매뉴얼] (http://dev.mysql.com/doc/refman/5.5/en/delete.html)을 참조하십시오. (_ "첫 번째 다중 테이블 구문의 경우 앞에 나열된 테이블의 일치하는 행만 FROM 절이 삭제됩니다. "_) – Wrikken

관련 문제