2013-04-30 27 views
0

我有一個MySQL表像這樣如何在將某些列複製到新表後將最新的id替換爲列值?

id parentid name 
-- ------ ---- 
1 0  name1 
2 1  name2 
3 2  name3 
4 0  name4 
. .  .... 

複製一些行到一個新的表,我需要更換的parentId值後,以新插入的ID如果不爲0像下面

ids parentids names 
-- ------  ---- 
10  0  name1 
11 10  name2 
12 11  name3 
13  0  name4 
. .   .... 

如何我可以使用PHP和MySQL來建立嗎?謝謝。

+0

有點像更新mytable set parentids = ids where parentids!= 0? – Victor 2013-04-30 20:29:44

+0

你怎麼知道1,name1在你的新表上成爲了10,name1?你能用這個名字加入兩張表嗎? – fthiella 2013-04-30 20:34:37

+0

您是否使用'0'替代'NULL'? – tadman 2013-04-30 20:39:54

回答

1

你或許應該做任何你可以保持的ID相同。如果這是不可避免的,你必須重新映射:

CREATE TEMPORARY TABLE _remap AS 
    SELECT table_b.id AS new_id, table_a.id AS old_id 
    FROM table_b 
    LEFT JOIN table_a ON table_a.name=table_b.name 

UPDATE table_b,_remap SET table_b.parent_id=_remap.new_id 
    WHERE table_b.parent_id=_remap.old_id 

這假設你name柱是獨一無二的。

+0

謝謝你tadman。我會嘗試一下,讓你知道Tadman – librium 2013-04-30 20:45:29

+0

,它給了我更多的頭痛,然後我就有了。所以,我找到了一個不同的方式來做到這一點。我在新表上創建了一個old_table列,並在那裏複製了舊錶的ID。現在,我使用這個新行而不是ids列來計算。謝謝大家。 – librium 2013-04-30 21:48:38

+0

這是另一種方式。您可以在重新映射後刪除附加列。 – tadman 2013-04-30 22:38:21

1

我不太清楚你的意思是「到新插入的ID」是什麼,但是這可能會幫助您入門:

UPDATE tableName SET `parentid` = '(Enter new value here)' WHERE parentid != 0; 
+0

在表1中,id 2的parentid爲1.當我將此行復制到新表(表2)時,會創建一個新的id。我只需要將表1的parentid替換爲1即可獲得10或其他任何數字的新ID。我希望這是有道理的。 – librium 2013-04-30 20:38:18

相關問題