sql установка свойства xml через цикл - PullRequest
0 голосов
/ 09 февраля 2011

отчаянно пытается объединить 2 простых ответа в то, что мне нужно.

Цикл sql и набор свойств

sql для установки значения xml

SET @I := 0;
SELECT *,
@I := @I + 1
SET xml = UpdateXML(xml,'comic/pageNumber', '<pageNumber>'.@I.'</pageNumber>')
FROM `comics`
ORDER BY ExtractValue(xml,'comic/pageNumber')+100000 ASC

это так близко, как я пришел, я знаю, что SELECT / ORDER BY работает отдельно от попытки установить свойство xml.

примечание: +100000 - это работа вокруг, чтобы рассматривать значение как числовое для сортировки. в противном случае 11 <2, но 100011> 100002

я тоже пробовал это

SET @I := 0;
UPDATE comics,
@I := @I + 1 AS newPageNumber
SET xml = UpdateXML(xml,'comic/pageNumber', '<pageNumber>'.@I.'</pageNumber>')
WHERE 1
ORDER BY ExtractValue(xml,'comic/pageNumber')+100000 ASC

мне кажется, я просто не знаю, как объединить SELECT и UPDATE

1 Ответ

1 голос
/ 09 февраля 2011
UPDATE comics
inner join (
  select c.id, @row:=@row+1 rownum
  from (select @row:=0) X cross join comics c
  ORDER BY ExtractValue(xml,'comic/pageNumber')*1.0) Y on Y.id=comics.id
SET xml = UpdateXML(xml, 
                'comic/pageNumber', 
                concat('<pageNumber>',Y.rownum,'</pageNumber>'))
;

На основании этой схемы испытаний и данных

create table comics (id int auto_increment primary key, xml text);
insert comics select null, '<comic><name>test1</name><pageNumber>7</pageNumber><content>page 5 con</content></comic>';
insert comics select null, '<comic><name>test1</name><pageNumber>3</pageNumber><content>page 6 con</content></comic>';
insert comics select null, '<comic><name>test1</name><pageNumber>5</pageNumber><content>page 7 con</content></comic>';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...