拼命地将两个简单的答案结合到我需要的具体内容中。
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
答案 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>';