Yii DbMigration将数据移动到其他表

时间:2012-01-10 05:28:29

标签: mysql sql yii database-migration

我正在Yii中编写CDbMigration来创建一个带有现有表的外键的新表。这很容易。我还想把旧表中的每个条目都复制到新表中,然后将其id,缩略图和myfunction(标题)复制到旧表中。

迁移前的old_table应该看起来像(截断的)

CREATE TABLE IF NOT EXISTS `old_table` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `thumbnail` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1;

在我有一个new_table和没有thumbnail

的旧表之后
CREATE TABLE IF NOT EXISTS `new_table` (
  `old_id` int(11) unsigned NOT NULL, -- foreign key to old_table
  `transformed_title` varchar(255) NOT NULL,
  `thumbnail` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1;

另外,myfunction是一个转换字符串的函数。

现在我已经明白在迁移中使用CActiveRecord是不好的做法,但是我的SQL技能不够清晰,无法知道是否有SQL命令可以执行迁移所需的操作。或者这是我应该在脚本中单独复制数据的东西(即不是我应该使用迁移的内容)?

1 个答案:

答案 0 :(得分:1)

一般来说,您可以使用INSERT...SELECT将数据复制到另一个表格;既然你要求SQL命令,这可能就是你要找的东西:

INSERT INTO new_table (old_id, transformed_title, thumbnail)
SELECT id, MYFUNCTION(title), thumbnail FROM old_table

但是,myfunction需要是MySql提供的函数,否则此查询(或纯SQL中的任何其他方法)将永远无法工作。