Я добавил новый столбец в таблицу и хочу предварительно заполнить его.
На данный момент у меня есть это:
update Table_A
set packages = 'a:1:{i:0;a:2:{s:4:"name"; s:' + ltrim(str(len(p.name))) + ':"' + p.name + '";'+
's:11:"category_id"; a:1:{i:0;s:1:"0";}}}'
from broker_product as Table_A
join scheme s on Table_A.scheme_id = s.id
join product p on p.id = s.product_ids
where Table_A.packages is null
Что я хочу сделать, это заполнить category_id
со значением, основанным на значениях столбца в product
, в отличие от фиксированной строки, которой он является сейчас.
Пример того, что находится в product.risks
:
a:2:{i:0;a:5:{s:10:"field_name";s:24:"Gadget Accidental Damage";s:19:"risk_category_value";s:4:"1.00";s:13:"variable_name";s:24:"gadget-accidental-damage";s:11:"description";s:0:"";s:10:"hover_text";s:0:"";}i:1;a:5:{s:10:"field_name";s:32:"Home Emergency Accidental Damage";s:19:"risk_category_value";s:4:"2.00";s:13:"variable_name";s:0:"";s:11:"description";s:0:"";s:10:"hover_text";s:0:"";}}
В этом примере я хотел бы, чтобы category_id
было:
a:2:{i:0;s:1:"0";i:1;s:1:"1";}
, который является массивом такой же длины, что и products.risk
, со значениями i:0;s:1:"0";
для размера массива, считаяколичество элементов в product.risks
.
В качестве примера я ищу что-то вроде этого (с правильным регулярным выражением, а не с разбитым материалом, который я предоставил):
update Table_A
set packages = 'a:1:{i:0;a:2:{s:4:"name"; s:' + ltrim(str(len(p.name))) + ':"' + p.name + '";'
's:11:"category_id"; ' + preg_replace('/a:(\d+):{(i:\d+;)/', 'a:$1:{$2s:1:"0";}', p.risks) + '}}'
from broker_product as Table_A
join scheme s on Table_A.scheme_id = s.id
join product p on p.id = s.product_ids
where Table_A.packages is null