更新您可以像这样一次克隆多个部分
INSERT INTO section (sec_title)
SELECT CONCAT('Copy of ', sec_title)
FROM section
WHERE id IN(1, 2)
ORDER BY id;
INSERT INTO category (sectionid, cat_title)
SELECT LAST_INSERT_ID() + rnum, cat_title
FROM
(
SELECT sectionid, cat_title, @n := IF(@g = sectionid, @n + 1, 0) rnum, @g := sectionid
FROM category CROSS JOIN (SELECT @n := -1, @g := NULL) i
WHERE sectionid IN (1, 2)
ORDER BY sectionid, id
)q;
这是SQLFiddle演示
回答原始问题:
有没有一种简单的方法可以将一个部分及其所有类别复制到同一个部分和类别表中?
假设id两个表中的列都是auto_increment列,并且您想克隆第 2 节,您可以这样做
INSERT INTO section (sec_title)
SELECT CONCAT('Copy of ', sec_title)
FROM section
WHERE id = 2;
INSERT INTO category (sectionid, cat_title)
SELECT LAST_INSERT_ID(), cat_title
FROM category
WHERE sectionid = 2;
这是SQLFiddle演示
您可以将其包装在存储过程中
DELIMITER $$
CREATE PROCEDURE clone_section(IN _sectionid INT)
BEGIN
INSERT INTO section (sec_title)
SELECT CONCAT('Copy of ', sec_title)
FROM section
WHERE id = _sectionid;
INSERT INTO category (sectionid, cat_title)
SELECT LAST_INSERT_ID(), cat_title
FROM category
WHERE sectionid = _sectionid;
END$$
DELIMITER ;
然后使用它
CALL clone_section(2);
这是SQLFiddle演示