在MySQL

时间:2017-01-26 15:04:39

标签: mysql mongodb many-to-many denormalization

我想在mysql中对多对多关系进行非规范化。为了以Json格式Schema导入MongoDB。

输入

我有3张桌子:

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

示例

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

我希望通过将类型转换为数组或多个值来将其转换为单个表格。

有相当多的流派(只有15种)。

输出

因此,表的最终输出将是:

Movies : id, title, url, genre

这里,类型将是多个值。

示例:

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

我这样做了 - MySQL查询

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

但是根据类型的数量会导致很多重复。如果我能完全抛弃类型,那就太好了。

1 个答案:

答案 0 :(得分:2)

在这个原因中你应该使用GROUP_CONCAT()功能

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

我没有测试上面的查询(可能会有一些错别字),但我希望你能够得到这个想法