对 MySQL 中的多对多关系进行非规范化
denormalize many to many relationship in MySQL
我想对 mysql 中的多对多关系进行非规范化。为了将 MongoDB 导入为 Json 格式架构。
输入
我有 3 个 table:
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
我想通过将类型作为数组或多个值移动到电影中来将其转换为单个 table。
流派数量有限(只有15种)。
输出
所以,table 的最终输出将是:
Movies : id, title, url, genre
在这里,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
但会导致大量重复,具体取决于流派的数量。如果我能完全抛弃流派就好了。
在这种情况下你应该使用 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
我没有测试上面的查询(可能有一些错别字),但我希望你能理解这个想法
我想对 mysql 中的多对多关系进行非规范化。为了将 MongoDB 导入为 Json 格式架构。
输入
我有 3 个 table:
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
我想通过将类型作为数组或多个值移动到电影中来将其转换为单个 table。
流派数量有限(只有15种)。
输出
所以,table 的最终输出将是:
Movies : id, title, url, genre
在这里,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
但会导致大量重复,具体取决于流派的数量。如果我能完全抛弃流派就好了。
在这种情况下你应该使用 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
我没有测试上面的查询(可能有一些错别字),但我希望你能理解这个想法