Обновление нескольких строк - PullRequest
5 голосов
/ 12 июня 2011

У меня проблема с обновлением нескольких строк таблицы mysql с помощью одного оператора mysql.

У меня есть rowids, которые я хочу обновить в строке, например.

$ids="id1, id2, id3, id4,...."

и у меня есть значения в другой строке, например.

$values="str1, str2, str3, str4,....";

(у меня есть более 30000 строк для обновления)

Идея в том, что строка с id1 должна быть обновлена ​​с помощью str1 и т. Д.

Как я могу это исправить?

Спасибо

Ответы [ 2 ]

1 голос
/ 13 июня 2011

Создайте временную таблицу с двумя столбцами, id и str, и выполните очень длинный

INSERT INTO temptable VALUES (id1,str1),(id2,str2)...(idn,strn);

Вы строите строку в цикле for без перехода в БД.Затем вы делаете одно UPDATE присоединение к таблице временных значений очевидным образом.(Индексирование временной таблицы может помочь, а может и не помочь.)

Вы не хотите 30K циклические поездки в БД.(С другой стороны, вам, возможно, придется разделить INSERT, если вы столкнетесь с проблемами максимальной длины строки.)

1 голос
/ 12 июня 2011

Это будет очень уродливый запрос, но ...

update table
set    str = case id
             when id1 then str1
             when id2 then str2
             ...
             end
where  id in (id1, id2, ...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...