Имя: Пароль:
IT
Веб-мастеринг
SQLеведы, помогите сваять запрос по апдейту значения в поле таблицы
,
0 WhiteCat
 
26.07.13
15:17
Есть запрос: select * from b_iblock_element_property where (IBLOCK_PROPERTY_ID=88 or IBLOCK_PROPERTY_ID=73 or IBLOCK_PROPERTY_ID=76) and (VALUE like '%http%') and not (VALUE like '%target%')

Выбирает из таблицы записи, у которых в поле VALUE в качестве значения указан URL, у которого в <a> нет target="_blank". Пример значения:
a:2:{s:4:"TEXT";s:89:"<a href="http://www.xxx.ru/certificates/Promet/Promet_T.jpg">Скачать сертификат</a>";s:4:"TYPE";s:4:"html";}

Нужно во всех этих записях первую подстроку "> заменить на "target="_blank">

Ткните носом на пример, или подскажите готовый текст запроса.
1 WhiteCat
 
26.07.13
15:19
Не первую подстроку ">, а просто подстроку ">, она там единственная. Точнее, есть записи, у которых их две или три, но заменять нужно все, вот пример такой записи:

a:2:{s:4:"TEXT";s:316:"<a href="http://www.xxx.ru/certificates/Promet/Promet-mebel-2015-1.jpg">;Скачать сертификат</a><br>
<a href="http://www.xxx.ru/certificates/Promet/Promet-mebel-2015-2.jpg">;Скачать приложение 1</a><br>
<a href="http://www.xxx.ru/certificates/Promet/Promet-mebel-2015-3.jpg">;Скачать приложение 2</a>";s:4:"TYPE";s:4:"html";}
2 kokamoonga
 
26.07.13
15:21
(0) речь идет о MySql?
и второй вопрос чисто для интереса: это где такая аццкая система хранения?
3 WhiteCat
 
26.07.13
15:28
(2) Дэ. Это сайт на битриксе.
4 kokamoonga
 
26.07.13
15:31
(3) наверно что-то вроде так:

UPDATE
    SET value = REPLACE(value, '">', 'target="_blank">')
WHERE
    (IBLOCK_PROPERTY_ID=88 or IBLOCK_PROPERTY_ID=73 or         IBLOCK_PROPERTY_ID=76) and (VALUE like '%http%') and not (VALUE like    '%target%')

или там надо будет еще кавычки экранировать типа 'target=\"_blank\">'
5 WhiteCat
 
26.07.13
15:35
(4) Спасиб, сча попробуем на кошках...
6 МихаилМ
 
26.07.13
15:36
IBLOCK_PROPERTY_ID=88 or IBLOCK_PROPERTY_ID=73...

замените на IBLOCK_PROPERTY_ID(88,73...)
7 WhiteCat
 
26.07.13
15:50
(6) ок
8 WhiteCat
 
26.07.13
17:37
Так то вариант из (4) проканал (технически). Но результата нет, ибо у битрикса есть свои особенности. Если кто вдруг будет когда-нить запросами менять значения свойств товаров в Битриксе, то вот вам причина глюка.
Строка имеет формат
a:2:{s:4:"TEXT";s:89:"<a href="http://www.safemoney.ru/certificates/Promet/Promet_T.jpg"; target="_blank">Скачать сертификат</a>";s:4:"TYPE";s:4:"html";}
где во втором S хранится длина содержимого, следкющего за ней - s:89 и соответственно длина строки "<a href="http://www.safemoney.ru/certificates/Promet/Promet_T.jpg"; target="_blank">Скачать сертификат</a>" должна равняться 89 символам, а поскольку после добавления  target="_blank" она увеличивается, битрикс это не принимает и игнорирует данное значение. Если при апдейте строки поменять s:89 на s:105, то все пучком.
9 Fragster
 
модератор
26.07.13
17:38
это не битрикс, это ЗначениеВСтрокуВнутр от php
10 WhiteCat
 
26.07.13
17:39
В общем c регэкспами заморачиваться лень, лучше напишу скрипт и обработаю все 100505-ю запросами, благо это один раз надо сделать.
11 WhiteCat
 
26.07.13
17:41
(9) Ну то есть надо скриптом получить все нужные value, перевести их ЗначениеВСтрокуВнутр в строку, проапдейтить строку, сделать СТрокуВЗначение и запихать обратно?
12 Fragster
 
модератор
26.07.13
17:41
(10) не надо регэкспами, надо выбрать нужное, сделать http://www.php.net/manual/en/function.unserialize.php, поменять значение, сделать http://php.net/manual/en/function.serialize.php и записать строку в базу
13 Fragster
 
модератор
26.07.13
17:41
(11) ага
14 WhiteCat
 
26.07.13
17:41
(9) А как оно там у php правильно называется, это ЗначениеВСТрокуВнутр?
15 WhiteCat
 
26.07.13
17:42
(12) О, ясн, (14) отпадает
16 WhiteCat
 
26.07.13
17:42
(13) Чувак, ты крут!
17 Fragster
 
модератор
26.07.13
17:45
вообще подобное запихивание ИМХО признак говна в архитектуре
18 WhiteCat
 
26.07.13
17:49
(17) Не, это автоматизация исправления забитых неправильно юзерами в свойства товаров ссылок на сертификаты, которые открываются в окне сайта. А надо чтобы открывались в отдельном окне.
19 Fragster
 
модератор
26.07.13
18:01
(18) я про то, что ассоциативные массивы лежат в текстовом поле БД
20 WhiteCat
 
26.07.13
18:34
(19) Это к битриксу
21 kokamoonga
 
26.07.13
18:42
(17) (19) полностью согласен, о чем в вопросительной форме выразил свое отношение в (2).
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.