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'],
);
→ Ссылка