Как можно заменить ID в таблице массово?

122
31 марта 2021, 22:00

в массиве есть данные вида:

старый ID => Новый ID

[2154] => 87599
[2155] => 87600
[2156] => 87601
[2157] => 87602
[2158] => 87603
[2159] => 87604
[2160] => 87605
[2161] => 87606
[2162] => 87607
[2163] => 87608
[2164] => 87609
[2165] => 87610
[2166] => 87611
[2167] => 87612
[2168] => 87613
[2169] => 87614
[2170] => 87615
[2171] => 87616
[2172] => 87617

имеется таблица work где есть старые ID.

как выполнить SQL update одним запросом так чтобы поменять старые ид на новые?

Answer 1

Внутри апдейта проверить каждую пару явно с помощью case-when:

$ar = [1 => 11, 2 => 22, 3 => 33];
echo "UPDATE foo SET id = CASE id\n";
foreach ($ar as $key => $value) {
    echo "WHEN {$key} THEN {$value}\n";
}
echo "END\nWHERE id IN(".implode(", ", array_keys($ar)).")\n";

В итоге получится такой запрос для выполнения:

UPDATE foo SET id = CASE id
WHEN 1 THEN 11
WHEN 2 THEN 22
WHEN 3 THEN 33
END
WHERE id IN(1, 2, 3)
Answer 2

Кажется айдишки просто увеличились на 85445.

update tableName
set id = id + 85445
where id between 2154 and 2172
Answer 3

Используйте стандартный запрос на апдейт.

UPDATE test SET id = id + 85445 WHERE id > 0;
Answer 4

Последовательность может быть разной, я для примера написал массив.

Если бы можно было update как insert делать..

немного дикого решения:

$sql = '';
foreach ($array as $oldId => $newId){
    if($oldId && $newId)
        $sql .= "UPDATE b_iblock_element SET ID = {$newId} WHERE ID = {$oldId};\n";
}
echo $sql;

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

READ ALSO
Выборка данных, циклы

Выборка данных, циклы

Возникла следующая задача: вывести количество игроков онлайнЕсть такой код:

136
задача про ООП php

задача про ООП php

Задача с одного сайта, найди сумму зарплат двух объектов$name, $age, $salary объявлены private

152
XML To Java Object

XML To Java Object

Есть XML строка такого типа:

113
Код из стороннего потока изменяет UI

Код из стороннего потока изменяет UI

Во многих источниках говорится, что код из стороннего потока не может изменять экран приложения(UI) и для этого нужно использовать Handler, runOnUiThread()...

117