如何在 MySQL 中为另一个表的每个条目更新表的每个条目



我尝试通过用映射表替换表中的文本来更新表。 我想出的解决方案有效,但仅适用于一个条目。

如何为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);

项目

textstyle="text-align: left;">1style="text-align: left;">2><span><a href="item_id=222">Link</a></span>style="文本对齐:左;">3style="文本对齐:左;">4
idtype
1<span><a href="item_id=111">Link</a></span>
1
1<span><a href="item_id=333">Link</a></span>
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;

相关内容

  • 没有找到相关文章

最新更新