2012-01-10 3 views
0

私はYiiでCDbMigrationを作成して、既存のテーブルへの外部キーを持つ新しいテーブルを作成しています。それは簡単だ。古いテーブルのサムネイルを削除する前に、古いテーブルのすべてのエントリを取得し、id、サムネイル、およびmyfunction(タイトル)を新しいテーブルにコピーしたいと思います。Yii DbMigration他のテーブルへのデータの移動

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; 

なしNEW_TABLEと古いテーブルを持つことになります後のようになります前に、また、変換する機能をmyfunctionis文字列。

CActiveRecordを使用すると、移行で悪い習慣となることがわかりましたが、SQLのスキルが十分ではなく、移行のためにSQLコマンドがあるかどうかを知ることができません。それとも、スクリプトでデータを個別にコピーする必要がありますか(つまり、移行を使用する必要があります)

答えて

1

一般に、INSERT...SELECTを使用して別のテーブルにデータをコピーできます。 MySQLはそうでない場合は、このクエリ(または純粋なSQLの他のアプローチ)を提供して機能する必要がありますmyfunction、しかし

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

になることはありません:あなたはSQLコマンドをお願いするので、これはあなたが探しているものはおそらくです働くことができる。

+0

ええ 'myfunction'はMySQLのものではないので、うまくいきません。代わりに、データを選択してPHPで変換して挿入するコードを書くことにしました。すべてYiiクエリビルダを使用します。 – Matt

関連する問題