SQL или Yii2 как сделать bulk update c like условием
Есть некое количество сгенерированных запросов на обновление
UPDATE table SET field=REPLACE(field, 'text1', 'text2') WHERE field like '%text1%';
Не хочется отправлять по одному запросу в базу, можно ли как-то выполнить Bulk request, ключевой момент чтобы в нем фигурировало обновление по LIKE. Спасибо
Ответы (2 шт):
Автор решения: phpBear
→ Ссылка
Если у Вас в каждом запросе разные таблицы - то нет
UPDATE table SET field=REPLACE(field, 'text1', 'text2') WHERE field like '%text1%';
UPDATE table1 SET field=REPLACE(field, 'text1', 'text2') WHERE field like '%text5%';
Насколько я помню BULK запросы позволяют обновить несколько строк сразу в одной таблице.
UPDATE people
SET name =
(CASE id WHEN 1 THEN 'Karl'
WHEN 2 THEN 'Tom'
WHEN 3 THEN 'Mary'
END)
WHERE id IN (1,2,3);
Если же в рамках одной таблицы то можно попробовать что-то такое
UPDATE table
SET name = replace(
-- что
( CASE field like '%text1%'
WHEN false THEN (
CASE field like '%text2%'
WHEN false THEN ( следующий case )
WHEN true THEN 'text2'
END
)
WHEN true THEN 'text1'
END
),
-- На что
( CASE field like '%text1%'
WHEN false THEN (
CASE field like '%text2%'
WHEN false THEN ( следующий case )
WHEN true THEN 'text3'
END
)
WHEN true THEN 'text2'
END
)
)
WHERE field like '%text1%' or field like '%text2%' or ...
Автор решения: Alex Black
→ Ссылка
Можно сделать так:
Table::updateAll(
['=', 'field', "REPLACE(field, 'text1', 'text2')"],
['like', 'field', 'text1'],
);