我尝试通过用映射表替换表中的文本来更新表。 我想出的解决方案有效,但仅适用于一个条目。
如何为id_mapping表中的每个条目更新项目的所有条目?
示例表:
DROP TEMPORARY TABLE IF EXISTS `item`;
DROP TEMPORARY TABLE IF EXISTS `id_mapping` ;
CREATE TEMPORARY TABLE IF NOT EXISTS `item` (
`id` INT PRIMARY KEY AUTO_INCREMENT,
`type` INT DEFAULT 1,
`text` VARCHAR(200) NULL DEFAULT NULL
)
COLLATE='utf8_general_ci'
ENGINE=MEMORY;
CREATE TEMPORARY TABLE IF NOT EXISTS `id_mapping` (
`old_id` INT NOT NULL,
`new_id` INT NOT NULL,
PRIMARY KEY (old_id, new_id)
)
COLLATE='utf8_general_ci'
ENGINE=MEMORY;
INSERT INTO `item` (`type`, `text`)
VALUES
(1, '<span><a href="item_id=111">Link</a></span>'),
(1, '<span><a href="item_id=222">Link</a></span>'),
(1, '<span><a href="item_id=333">Link</a></span>'),
(2, '<span><a href="item_id=444">Link</a></span>');
INSERT INTO `id_mapping` (`old_id`, `new_id`)
VALUES
(111, 999),
(222, 888),
(333, 777),
(444, 666);
项目
id | type | |
---|---|---|
1 | <span><a href="item_id=111">Link</a></span> | |
style="text-align: left;">2 | 1 | > |
1 | <span><a href="item_id=333">Link</a></span> | |
style="文本对齐:左;">4 | 2 | <span><a href="item_id=444">Link</a></span> |
您需要以某种方式连接表。例如
UPDATE `item` i
JOIN `id_mapping` m ON i.text like concat('%item_id=', m.old_id,'%' )
SET i.`text` = REPLACE(
i.`text`,
CONCAT('item_id=',m.old_id),
CONCAT('item_id=',m.new_id)
)
WHERE i.`type` = 1;