2010-07-01 1 views
1
<?php 
    $query = 'SELECT id FROM transaction_table'; 
    $result = db_query($query); 
    while($row = db_fetch_array($result)) {  
     //do some processing 
     db_query('UPDATE transaction_table SET updated = "1" WHERE id = "%s"',$row['id']); 
    } 
?> 

이 스크립트를 실행할 때마다 몇 개의 임의 행 (평균 8-25 개) 만 업데이트됩니다. 모든 행을 업데이트해야합니다.구성이나 INNODB 원칙으로 인해 다음 MYSQL 업데이트가 모든 업데이트를 반드시 수행하지 않아도됩니까?

+0

아마도이 문제에 더 많은 것이 있습니다. 그렇지 않으면 단지'UPDATE transaction_table SET updated = "1"'을 실행하여 모든 레코드를 업데이트 할 수 있습니다 –

답변

1

각 루프에서 쿼리를 에코 아웃합니다. 내 추측은 몇 가지 오류가 있다는 것입니다. 이 코드를 사용하십시오 :

<?php 
    $query = 'SELECT id FROM transaction_table'; 
    $result = db_query($query); 
    while($row = db_fetch_array($result)) {  
     //do some processing 
     echo 'UPDATE transaction_table SET updated = "1" WHERE id = "'.$row['id'].'"<br>'; 
     db_query('UPDATE transaction_table SET updated = "1" WHERE id = "%s"',$row['id']); 
    } 
?> 

MySQL에서 직접 각각의 쿼리를 수동으로 실행하고 각 쿼리가 실행되는지 확인하십시오. 당신이 우리에게 준 코드에서 문제를 일으킬만한 것을 볼 수 없습니다.

0

내가 생각할 수있는 유일한 이유는 SELECT 뒤에 삽입 된 행을 업데이트하지 못한다는 것입니다.

는 나는이 오독하고 희망하지만, Drupal db_fetch_array reference는이 기능에 대해 설명합니다

가 배열로 이전 쿼리에서 하나 개의 결과 행을 반환합니다.

이것은 실제로 이전 쿼리입니까? 한 번에 둘 이상의 쿼리를 활성화 할 수 있기를 바랍니다. 내가 Drupal을 사용한 적은 한번도 없었으므로 문서가 얼마나 리터럴 한 것인지 잘 모르겠습니다. 문서가 말 그대로 읽힐 수 있다면, db_query('UPDATE...')은 다음 db_fetch_array 호출이 어떻게 든 어긋나게 될 것이라고 걱정할 것입니다.