【问题标题】:denormalize many to many relationship in MySQL非规范化 MySQL 中的多对多关系
【发布时间】:2017-01-26 23:31:45
【问题描述】:

我想非规范化 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

但根据流派的数量会导致大量重复。如果我能完全抛弃流派就好了。

【问题讨论】:

    标签: mysql mongodb many-to-many denormalization


    【解决方案1】:

    在这个原因你应该使用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
    

    我没有测试上面的查询(可能有一些错别字),但我希望你能明白

    【讨论】:

      猜你喜欢
      • 2013-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-01
      • 2015-06-18
      • 1970-01-01
      • 2013-08-21
      • 2018-06-06
      相关资源
      最近更新 更多