2012-01-10 16 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; 

後,我將有一個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; 

此外,myfunctionis功能改造一個字符串。

現在我明白了,在遷移過程中使用CActiveRecord是不好的做法,但是我的SQL技能不夠清晰,無法知道是否有SQL命令來執行我想要的遷移。或者這是我應該單獨在腳本中複製數據的東西(即不是我應該使用遷移的東西)?

回答

1

一般而言,您可以使用INSERT...SELECT將數據複製到另一個表;既然你問了一個SQL命令,這可能是你在找什麼:

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

然而,myfunction需要是MySQL的另有規定此查詢功能(或純SQL任何其他方式)將永遠不會能工作。

+0

是的'myfunction'不是MySQL的,所以我猜這樣做不行,我決定只是寫代碼來選擇數據,然後在PHP中進行轉換,然後插入它。全部使用Yii查詢生成器。 – Matt 2012-01-11 02:30:54

相關問題