2011-11-04 2 views
1

PLOT : 2 DB : submitdata 및 maindata가있는 PAD 웹 사이트가 있습니다.mysql - 한 테이블에서 다른 테이블로 행을 이동하거나

MAINDATA의 COLUMNS : 이름 링크 이메일 웹 사이트 .... ProgID를 SUBMITDATA의 COLUMNS : submitdata DB는 모든 maindata의 DB로 열을 더한 또 다른 3 열이 이름 링크 이메일 웹 사이트 .... ProgID를, 뒤로를

을 affiliateid가

submitdata DB에서 maindata DB로 모든 행을 이동해야하며, if backlink! = ''및 IF affiliateid! = $ affiliateid.

또 다른 문제는 progid가 주 데이터 DB에 이미 있고이 경우 새 데이터로 해당 행을 업데이트해야하는 경우입니다 ... 또 다른 문제는 제가 약 40.000 행을 가지고 있다는 것입니다. SELECT * FROM submitdata somea kill 컴퓨터.

PHP에서 어떻게하는지에 대한 이상이 있습니까?

답변

1

이 시도 :

EXPLAIN SELECT * FROM submitdata; 

아마도 당신이에 INDEX (이 대폭 쿼리 시간을 단축 할 수) 줄 수있는 어떤 필드를 알려줍니다. 그런 다음 backlink 및 affiliateid 필드가 비어있는 레코드를 이동하지 않으려는 경우 WHERE 절을 추가하여 쿼리에서 결과 집합을 줄일 수 있습니다.

$result = mysql_query('SELECT * FROM submitdata WHERE backlink <> "" AND affiliateid <> ""'); 
if ($result) { 
    while ($row = mysql_fetch_assoc($result)) { 
     $newResult = mysql_query(sprintf('SELECT name,progid FROM maindata WHERE progid = %d', $row['progid'])); 
     $row2 = mysql_fetch_row($newResult); 
     if ($row2) { 
      // do UPDATE query 
     } else { 
      // do INSERT query 
     } 
    } 
} 
+0

uuhuuu ... 그 멋진 코드입니다! 무리 감사 ! 결과를 게시 할 것입니다 .. 다시 감사드립니다! –

+0

당신을 환영합니다! 그것이 효과가 있기를 바랍니다. 어떤 불일치가 있으면 알려주세요. –

+0

네, 잘 했어. 여전히 실행 시간에 문제가 있고 서버를 너무 많이 오버로드하고 있습니다.하지만 헤이 .. 한 테이블에서 다른 테이블로 데이터를 이동하는 데 매력적입니다. hehe! :) 또한 업데이트 및 삽입 후 삭제 라인을 추가했습니다. –

1

여러분은 MySQL 도움말을 가지고 응용 프로그램 계층에서 작업하는 대신 모든 작업을 수행 할 수 있습니다. 쿼리를 작성하고 등 PHP/Perl을 기본적으로 하위 쿼리가! = ''와 제휴! = affiliateid가를 역음 조건을 만족하는 모든 행을 받고있다

INSERT INTO MAINDATA 
(col1, col2, col3....) 
SELECT col1, col2... FROM 
(
    SELECT col1, col2... 
    FROM SUBMITDATA SD 
    LEFT OUTER JOIN MAINDATA MD 
     ON SD.key1 = MD.key1 and SD.key2 = MD.key 
    WHERE 
      SD.backlink <> '' 
     AND SD.affiliate <> '$affiliatiid' 
) ND 
ON DUPLICATE KEY 
    SET update_col1 = col1 
     ,update_col2 = ... 

와 함께 제출합니다. MySQL은 그것들을 MainData에 삽입하려고 시도하고 행이 이미 존재한다면 (PK/UK 기반) SET 절에 주어진 컬럼을 업데이트 할 것이다.

참고 :이 방법은 두 DB가 모두 하나의 mysql 서버 아래에 있어야 제공됩니다.

관련 문제