2011-02-09 5 views
0

필자가 필요로하는 2 가지 간단한 대답을 필사적으로 결합하려고 필사적으로 노력했다. 작품은 XML 속성을 설정하려고 분리에 의해 루프를 통해 SQL 설정 XML 속성

sql to set an xml value

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

이 내가 온만큼 가까운

sql loop and set properties

, 나는 SELECT/ORDER를 알고있다.

사이드 참고 : 100000 정렬에 숫자 로 값을 치료하기 위해 주위에 작업 이다. 그렇지 않으면 11 < 2 만 100011은 100002

나는 또한 시도>이

SET @I := 0; 
UPDATE comics, 
@I := @I + 1 AS newPageNumber 
SET xml = UpdateXML(xml,'comic/pageNumber', '<pageNumber>'[email protected]'</pageNumber>') 
WHERE 1 
ORDER BY ExtractValue(xml,'comic/pageNumber')+100000 ASC 
난 그냥이 SELECT 결합하는 방법을 모르는 생각

및 UPDATE

답변

1
UPDATE comics 
inner join (
    select c.id, @row:[email protected]+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>'; 
+0

놀라운! 대단히 감사합니다! – SketchBookGames

관련 문제