2011-02-08 66 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