Приведет ли какая-либо конфигурация или принцип INNODB к следующему обновлению MYSQL, чтобы не выполнять все обновления? - PullRequest
1 голос
/ 01 июля 2010
<?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). Следует обновить все строки.

Ответы [ 2 ]

1 голос
/ 01 июля 2010

выводит запрос в каждом цикле. Я предполагаю, что есть несколько таких ошибок. Используйте этот код:

<?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 голосов
/ 09 июля 2010

Единственная причина, по которой я могу придумать, заключается в том, что при этом не удастся обновить строки, вставленные после SELECT.

Я надеюсь, что я неправильно понял это, но Drupal db_fetch_array ссылка описывает эту функцию как:

Извлечь одну строку результата из предыдущего запроса в виде массива.

Это на самом деле не означает предыдущий запрос не так ли? Я надеюсь, что вы можете иметь более одного активного запроса одновременно. Обратите внимание, что я никогда не использовал Drupal, поэтому я не уверен, насколько буквальной является документация. Если документация может быть прочитана буквально, то я буду обеспокоен тем, что db_query('UPDATE...') приведет к тому, что следующий вызов db_fetch_array будет ошибочным.

...