2011-02-08 63 views
2

我是mySql的新手。 我试图替换我的表的xml列中的值。sql设置一个xml值

我的select方法有效。

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

我的替换方法没有。我一直在寻找正确的语法,现在有点...

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

一些背景:

这种情况出现时,我删除漫画页面。

离开页面数的差距,在这之后我会之一:

迭代通过所有的漫画和删除页码任何间隙。

通过与PAGENUMBER所有的漫画比删除页面较大迭代,并减少1

+0

你能至少1后表示XML列的值的XML片段? – RichardTheKiwi 2011-02-09 00:15:34

回答

4

如何

UPDATE comics 
SET xml = UpdateXML(xml,'comic/pageNumber', '<pageNumber>5</pageNumber>') 
WHERE ExtractValue(xml,'comic/pageNumber') = 6 
-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 2011-02-09 00:12:44

+0

@SketchBookGames - 然后不要使用MySQL。 – OrangeDog 2011-02-09 10:06:02

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