2012-05-09 15 views
5

imleçler veya harici komut dosyaları/kod kullanmadan, SQL kayıtlarını kullanarak ana kayıtları ve tüm ilgili alt kayıtları kopyalamanın kolay bir yolu var mı? İşte bende ne bir örnek:MySQL üst öğesinin ve ilgili tüm alt kayıtların veritabanına yeni bir kimlik olarak kopyalanması

categories 
== 
category_id 
category_name 

parent_table 
== 
parent_record_id 
category_id 
... <other fields> 

child_table1 
== 
child_table1_id 
parent_record_id 
... <other fields> 

child_table2 
== 
child_table2_id 
parent_record_id 
... <other fields> 

Temelde, bütün bu verilerin kopyası kesin yapmanız gerekir. Değiştirilecek tek alanlar, hepsi auto_increment oldukları için kimlikleridir. Yukarıdaki şemaya dayanarak, kayıtları kategoriler tablosuna kopyaladığımda, tüm yeni category_id değerleriyle sonuçlanacağım. Ebeveyn_table kayıtlarının kopyalarını oluşturduğumda, eski kategori_id değerlerini yeni oluşturulmuş olan yeni kategori_kimliği değerleriyle bir şekilde güncellemenin bir yoluna ihtiyacım var. Daha sonra, child_record1 ve child_record2 kayıtlarını kopyalarken yeni parent_record_id değerlerini kullanmam gerekecek.

Bunu, PHP veya başka bir dilde harici olarak betimlemek yerine, bunu gerçekleştirmenin daha kolay bir yolu olması gerektiğini hissediyorum. Var mı?

cevap

1

Kontrol dışarı bu yazıyı, http://dev.mysql.com/doc/refman/5.1/en/insert-select.html

Temelde aşağıdaki

INSERT INTO table (id, column1, column2) (SELECT NULL, column1, column2 FROM table WHERE whatever_id = 123); 
+0

Teşekkür Bryan yapabilirsiniz. Bu sözdiziminin farkındayım. Bu, diğer ilgili kayıtları kopyalamak ve yeni kimliklerin tümünü takip etmek/güncellemek ile yaşadığım sorunu çözmüyor. – ShawnCBerg

İlgili konular