:-)
  • SQL 01.12.2009 10 Comments

    Если вы хотите делать массовый апдейт в MySQL, то я могу вам предложить вот такой рецепт. Сначала вы создаете временную таблицу, циклом собираете массовый INSERT запрос и потом вставляете данные из временной таблицы в нужную. Выглядеть это может, например, так:

    CREATE TEMPORARY TABLE ids (value INT, url VARCHAR(255));
    INSERT INTO ids VALUES 
        (0, 'http://url1.ru'),
        (0, 'http://url2.ru'),
        (0, 'http://url3.ru');
    UPDATE blogs, ids SET my_value = ids.value WHERE blogs.url = ids.url;

    Поясню. Допустим, мне понадобилось обновить некое значение в таблице в соответствии с URL. Скажем, статистику интернет-магазинов. Я создал временную таблицу из тех значений, по котороым будет вестись поиск, и значений, которые я буду вставлять в нужную мне таблицу. Дальше, идет INSERT сразу нескольких строк. Его очень просто собирать в цикле из массива. Например вот так:

    $elements = array();
    foreach ($aray as $url => $value) {
        $elements[] = '('.$db->escape($value).', '.$db->escape($url).')';
    }
    $insert_string = implode(',', $elements);

    После чего, собственно апдейт со вставкой. Временная таблица исчезнет после окончания сессии БД. На то она и временная.

    Tags: