2011-02-08 2 views
2

저는 mySql의 초보자입니다. 테이블의 xml 열에있는 값을 바꾸려고합니다.xml 값을 설정하는 SQL

내 선택 방법이 작동합니다.

SELECT * FROM `comics` WHERE ExtractValue(xml,'comic/pageNumber') = 6 

제 교체 방법은 없습니다.

이 상황이 내가 만화 페이지를 삭제하면 온다 : 나는

SET xml.modify(
replace value of ('comic/pageNumber') with 5 
) 

... 지금 비트에 대한 올바른 구문에 대한 몇 가지 배경을 검색했습니다.

모든 만화를 통해 반복 처리하고 페이지 번호에 틈을 제거 :

은 내가 어느 것 후 페이지 번호에서 틈을, 잎.

또는 삭제 된 페이지보다 큰 PAGENUMBER 모든 만화를 통해

반복 처리 해, 당신은 실제로 오히려 하나보다, 테이블의 필드를 저장하는 더 나을 것 1.

+0

에서 테스트 어떻게 당신은 XML 열에서 값을 나타내는 적어도 후 1 XML 조각? – RichardTheKiwi

답변

4

UPDATE comics 
SET xml = UpdateXML(xml,'comic/pageNumber', '<pageNumber>5</pageNumber>') 
WHERE ExtractValue(xml,'comic/pageNumber') = 6 
+0

완벽한 감사. – SketchBookGames

-1

에 의해 자신의 PAGENUMBER을 감소 필드에 xml. 그러면 다음이 작동합니다. 그렇지 않으면 관계형 데이터베이스를 전혀 사용하지 않아도됩니다.

BEGIN; 
DELETE FROM `comics` 
    WHERE `comicID` = :id AND `pageNumber` = :page; 
UPDATE `comics` SET `pageNumber` = `pageNumber` - 1 
    WHERE `comicID` = :id AND `pageNumber` > :page; 
COMMIT; 
+1

죄송합니다. 전 XML로 저장하는 데 열정이 있습니다. – SketchBookGames

+0

@SketchBookGames - MySQL을 사용하지 마십시오. – OrangeDog

2

에 대해이 MySQL 버전 5.1

UPDATE `comics` 
SET xml = UpdateXML(xml, 
       'comic/pageNumber', 
       concat('<pageNumber>',(ExtractValue(xml,'comic/pageNumber')+1),'</pageNumber>')) 
WHERE ExtractValue(xml,'comic/pageNumber') >= 1 
관련 문제