mysql - Yii DbMigration 将数据移动到其他表

标签 mysql sql yii database-migration

我正在 Yii 中编写 CDbMigration 来创建一个带有现有表外键的新表。那很容易。我还想获取旧表中的每个条目,并将其 id、缩略图和 myfunction(title) 复制到新表,然后再将缩略图放入旧表中。

迁移前的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 命令来执行我想要的迁移操作。或者我应该在脚本中单独复制数据(即不是我应该使用迁移的目的)?

最佳答案

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

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

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

关于mysql - Yii DbMigration 将数据移动到其他表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8798951/

相关文章:

yii CHtml::button 和 POST 请求到 Controller

php - 如何在 MySQL 表上使用内部连接?

mysql - Sqoop - 如果使用 order by 和 limit 1,则导入最大值查询失败

php - MySQL 中的外键约束

mysql - 内联描述时外键约束无效

mysql - 取决于外键是否为 NULL 的条件 JOIN?

mysql - 时间戳字段只能通过 Yii 中的行为更新

MySql -- 通过查询判断缺失数据的周期

sql - 形参 “@mode” 未声明为 OUTPUT 参数,而是在请求的输出中传递的实参

mysql - 使用 ORDER BY 时如何减少 sql 查询时间