【问题标题】:Yii DbMigration Moving Data to other tableYii DbMigration 将数据移动到其他表
【发布时间】:2023-03-22 08:14:01
【问题描述】:

我正在 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;

之后我会有一个新表和没有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 命令来执行我想要的迁移。或者这是我应该在脚本中单独复制数据的东西(即不是我应该使用迁移的东西)?

【问题讨论】:

    标签: mysql sql yii database-migration


    【解决方案1】:

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

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

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

    【讨论】:

    • 是的,myfunction 不是 MySQL 的,所以我想这行不通,我决定只编写代码来选择数据,在 PHP 中对其进行转换,然后将其插入。全部使用 Yii 查询生成器。
    猜你喜欢
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 2017-12-21
    相关资源
    最近更新 更多