sql通过循环设置xml属性

时间:2011-02-09 01:42:47

标签: sql xml for-loop

拼命地将两个简单的答案结合到我需要的具体内容中。

sql loop and set properties

sql to set an xml value

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&lt; 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 个答案:

答案 0 :(得分:1)

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>';