2017-01-26 14 views
0

Ich möchte viele zu viele Beziehung in Mysql denormalisieren. Um nach MongoDB als JSON Format zu importieren.Denormalisierung viele zu viele Beziehung in MySQL

Eingang

Ich habe 3 Tabellen:

Movies : id, title, url 
Genres : id, genre 
movie_genres : movie_id, genre_id 

Beispiel

movie Table 
id title  link      
1 star wars http://link-to-imdb 
2 shrek  http://link-to-imdb 

movie_genres Table 
movie genre      
1  1 
2  1 

genres Table 
id  genre      
0  unknown 
1  action 
2  comedy 
3  drama 

ich es zu einer einzigen Tabelle zu transformieren möchte nach Genre in Filme als Array oder mehr bewegenden Werte.

Es gibt eine begrenzte Anzahl von Genres (nur 15).

Ausgabe

So würde endgültige Ausgang der Tabelle sein:

Movies : id, title, url, genre 

Hier Genre mehrere Werte sein würde.

Beispiel:

id title  link     genre 
1 star wars http://link-to-imdb action, drama, sci-fi 
2 shrek  http://link-to-imdb anime 

Ich tat dies - MySQL Query:

select M.id ,M.title ,M.release_date, M.video, M.IMDBURL, G.genre 
from genres G, movie_genres MG, movies M 
where M.id = MG.movie and MG.genre = G.id 

aber viele Wiederholungen verursacht auf der Anzahl der Genres abhängig. Es wäre schön, wenn ich Genres komplett verkaufen könnte.

Antwort

2

In diesem Grunde sollten Sie GROUP_CONCAT() Funktion

SELECT movie.id, movie.title, movie.url, GROUP_CONCAT(g.genre SEPARATOR ', ') AS genres 
FROM movie 
LEFT JOIN movie_genres mg ON movie.id = mg.movie_id 
LEFT JOIN genres g ON mg.genre_id = g.id 
GROUP BY movie.id 

teste ich nicht verwenden, um die Abfrage oben (es einige Fehler sein könnte), aber ich hoffe, dass Sie in der Lage sein werden, die Idee zu bekommen