我正在本地化一个应用程序,需要将现有的TEXT列转换为文本的多个翻译版本。
原始表格如下:
为了存储本地化文本,我创建了一个新表:
我想用一个新的person.descTextId列替换person.description列。
对于在description列中具有值但descTextId为null的每个人:
然后删除person.description列。
最干净的方法是什么?我是否需要创建一个过程和游标,或者是否有一个聪明的MySQL语法可以帮助解决这个问题?你会怎么做?
答案 0 :(得分:0)
我用临时程序和循环来解决它。
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;