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

によるそれらのページ番号を削減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 
関連する問題