sql для установки значения xml - PullRequest
2 голосов
/ 09 февраля 2011

Я новичок в MySql.Я пытаюсь заменить значение в столбце xml моей таблицы.

мой метод выбора работает.

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

мой метод замены не работает.Я искал правильный синтаксис немного сейчас ...

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

некоторый фон:

эта ситуация возникает, когда я удаляю комическую страницу.

он оставляет пробел в номерах страниц, после чего я бы либо:

перебрал все комиксы и удалил все пробелы в номерах страниц.

или

перебралчерез все комиксы с pageNumber больше, чем удаленная страница, и уменьшите их pageNumber на 1.

Ответы [ 3 ]

4 голосов
/ 09 февраля 2011

Как насчет

UPDATE comics 
SET xml = UpdateXML(xml,'comic/pageNumber', '<pageNumber>5</pageNumber>')
WHERE ExtractValue(xml,'comic/pageNumber') = 6
2 голосов
/ 09 февраля 2011

Проверено на 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
0 голосов
/ 09 февраля 2011

Было бы лучше на самом деле хранить поля в таблице, а не одно поле с xml в нем.Тогда следующее будет работать.Иначе нет особого смысла использовать реляционную базу данных вообще.

BEGIN;
DELETE FROM `comics` 
    WHERE `comicID` = :id AND `pageNumber` = :page;
UPDATE `comics` SET `pageNumber` = `pageNumber` - 1 
    WHERE `comicID` = :id AND `pageNumber` > :page;
COMMIT;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...