в массиве есть данные вида:
старый 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 одним запросом так чтобы поменять старые ид на новые?
Внутри апдейта проверить каждую пару явно с помощью 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)
Кажется айдишки просто увеличились на 85445.
update tableName
set id = id + 85445
where id between 2154 and 2172
Используйте стандартный запрос на апдейт.
UPDATE test SET id = id + 85445 WHERE id > 0;
Последовательность может быть разной, я для примера написал массив.
Если бы можно было 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;
Интересно насколько это повлечет нагрузку? есть ли еще какие варианты?
Виртуальный выделенный сервер (VDS) становится отличным выбором
Возникла следующая задача: вывести количество игроков онлайнЕсть такой код:
Задача с одного сайта, найди сумму зарплат двух объектов$name, $age, $salary объявлены private
Во многих источниках говорится, что код из стороннего потока не может изменять экран приложения(UI) и для этого нужно использовать Handler, runOnUiThread()...