Mysql 对于表中的每条记录,在另一个表中插入一条记录,并将键放入第一个表的记录中
我正在本地化一个应用程序,需要将现有的文本列转换为文本的多个翻译版本 原始表如下所示: 人 人名:INT 描述:VARCHAR20 其他栏目 为了存储本地化文本,我创建了一个新表: 文本 textId:INT自动递增 languageId:INT 文本:文本 我想用新的person.descTextId列替换person.description列 对于描述列中有值但descTextId为空的每个人: 插入带有此人英文描述的新文本记录 languageId=1 将此人的descTextId更新为新的textId 价值 然后删除person.description列Mysql 对于表中的每条记录,在另一个表中插入一条记录,并将键放入第一个表的记录中,mysql,Mysql,我正在本地化一个应用程序,需要将现有的文本列转换为文本的多个翻译版本 原始表如下所示: 人 人名:INT 描述:VARCHAR20 其他栏目 为了存储本地化文本,我创建了一个新表: 文本 textId:INT自动递增 languageId:INT 文本:文本 我想用新的person.descTextId列替换person.description列 对于描述列中有值但descTextId为空的每个人: 插入带有此人英文描述的新文本记录 languageId=1 将此人的descTextId更新为新
做这一切最干净的方法是什么?我是否需要创建一个过程和游标,或者是否有一个聪明的MySQL语法可以帮助实现这一点?你会怎么做?我通过一个临时过程和循环解决了这个问题
DROP PROCEDURE IF EXISTS moveToTextTable;
DELIMITER ;;
CREATE PROCEDURE moveToTextTable()
BEGIN
DECLARE n INT DEFAULT 0;
DECLARE i INT DEFAULT 0;
DECLARE id INT DEFAULT 0;
SELECT COUNT(*) INTO n FROM person WHERE description IS NOT NULL AND description <> '';
WHILE i<n DO
SELECT personId INTO id FROM person WHERE description IS NOT NULL AND description <> '' AND descTextId IS NULL LIMIT 1;
INSERT INTO text (languageId, text) SELECT 1, description FROM person WHERE personId = id;
UPDATE person SET descTextId = LAST_INSERT_ID() WHERE personId = id;
SET i = i + 1;
END WHILE;
END;
;;
DELIMITER ;
CALL moveToTextTable();
DROP PROCEDURE IF EXISTS moveToTextTable;