Update нескольких строк sql

Тема в разделе "PHP Pro", создана пользователем vanderv, 30 июн 2010.

Статус темы:
Закрыта.
  1. vanderv

    vanderv

    Регистр.:
    30 май 2009
    Сообщения:
    267
    Симпатии:
    12
    PHP:
    UPDATE `Table1SET `price`=`3048WHERE `name`=`307080`
    UPDATE `Table1SET `price`=`3049WHERE `name`=`307081`
    UPDATE `Table1SET `price`=`347WHERE `name`=`315494`
    UPDATE `Table1SET `price`=`347WHERE `name`=`315496`
    UPDATE `Table1SET `price`=`347WHERE `name`=`315497`
    UPDATE `Table1SET `price`=`347WHERE `name`=`315498`
    UPDATE `Table1SET `price`=`347WHERE `name`=`315499`
    UPDATE `Table1SET `price`=`347WHERE `name`=`339498`
    UPDATE `Table1SET `price`=`347WHERE `name`=`344290`
    Есть много запросов на обновление цен в базе. как их объединить в один запрос, дабы уменьшить нагрузку. Потомочту таких запросов порядка 2000. Или нагрузки никакой не будет и можно смело посылать столько запросов? И ещё вопрос, если WHERE не найдёт такое name в базе, что будет в этом случае?
    Заранее благодарю
     
  2. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    нагрузка не такая уж и большая

    при жалении разнеси запросы по времени (1 -2 секунды )


    и разницы что один запрос, что несколько тут нет
     
  3. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102
    Код:
    UPDATE `Table1` SET `price`=`347` WHERE `name` in ( `315494`, `315496`, `315497`, `315498`, `315499`, `339498`, `344290`) ;
    
    Добавлено через 1 минуту
    ничего не будет. совсем ничего.
     
  4. jo0o00nyy

    jo0o00nyy Постоялец

    Регистр.:
    12 май 2010
    Сообщения:
    65
    Симпатии:
    27
    У Вас в приведенном запросе видно, что цены у некоторых товаров одинаковы, если таких "групп" много, то можно сделать так
    Код:
    UPDATE `Table1` SET `price`=`3048` WHERE `name`=`307080`
    UPDATE `Table1` SET `price`=`3049` WHERE `name`=`307081`
    UPDATE `Table1` SET `price`=`347` WHERE `name` IN (315494, 315496, 315497, 315498, 315499, 339498, 344290) 
    И какгбэ при UPDATE таблица блокируется, и при очень огромном кол-ве запросов за один раз у других пользователей могут быть проблемы. Как вариант можно после каждых Н (например 300) запросов делать sleep(1); или usleep (тут в микросекундах)
     
  5. vanderv

    vanderv

    Регистр.:
    30 май 2009
    Сообщения:
    267
    Симпатии:
    12
    Я вот что надумал...
    Брать селектом всю таблицу... Занести его в массив по строкам...
    Потом брать ту строку в которой есть нужное нам имя... менять в нём цену...
    и так всё проверить... А потом удалить старую базу и создать новую...
    Ну как-то так=) Как вариант?

    Добавлено через 19 минут
    Можнет есть решение во фреймворках? Я конечно с ними вообще никода не работал... но если там есть решение, то почему бы и нет=)
     
  6. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102

    т.е. ты посчитал что оптимизированная для выполнения запросов база данных, по времени справится намного хуже чем интерпретатор языка, который НЕ предназначен для обработки больших объемов данных? оптимизируй запросы или поменяй движок БД, если не устраивает работа текущего
     
Статус темы:
Закрыта.