2016-04-16 8 views
0

Ich hatte eine Tabelle, die eine eins zu eins Relation using parent_id Spalte verwendet, unsere Logik geändert und wir mussten viele zu viele, so dass wir -unforunatly- didn ' Es gibt keinen Luxus, das Datenbankmodell zu ändern. Daher haben wir mehrere Zeilen pro Relation eingefügt und sie nach dem Code gruppiert.Konvertieren von Tabelle von eins zu vielen in viele zu viele MYSQL

jetzt muss ich mysql Tabelle umstrukturieren, um viele zu viele Relation zu reflektieren.

Beispiel

Table Blog 
ID, Body, target_id, grouping 
1 etc  1   1 
2 etc  2   1 
3 etc2 1   3 
4 etc2 2   3 

Derzeit wann immer wir einen neuen Blogeintrag erstellen. Wir fügen die erste Zeile ein. Erstelle seine ID und repliziere den Einsatz für jedes Ziel.

so jetzt als db wuchs viel größer. Wir müssen dies stoppen und eine Zwischentabelle erstellen, die Beziehungen hält. so wird obige Tabelle

wird
Table Blog 
    ID, Body 
    1 etc 
    3 etc2 

Table Blog_target 
    blog_id,target_id 
    1  , 1 
    1  , 2 
    3  , 1 
    3  , 2 

so, wie ich Daten aus alter Tabelle in neuem aufspalten kann, ohne Daten in MySQL zu verlieren?

Antwort

1

so etwas vielleicht? new_blog Tisch, weil Ihr bereits Blog-Tabelle vorhanden ist, nachdem Sie fertig und zufrieden mit den Daten in new_blog Tabelle und blog_target Tisch sind, können Sie einfach einen Blog Tisch fallen und RENAME TABLE new_blog TO blog;

INSERT INTO new_blog(ID, Body) 
SELECT DISTINCT grouping, body FROM blog; 

INSERT INTO blog_target(blog_id,target_id) 
SELECT grouping,target_id 
FROM blog; 

sqlfiddle