[英]Many-to-many query, MySQL
我有3个这样的表:
电影:
类型:
movieGenres:
电影可以包括许多类型。
我想抓住电影片名,运行时和发行年及其类型。 我怎么能在一个查询中做到这一点?
我试着这样做:
SELECT u.movie_title, u.movie_runtime, u.movie_releaseYear, a.genre_name
FROM movieGenres ua
LEFT JOIN movies u ON u.movie_id = ua.movieGenre_filmId
LEFT JOIN genres a ON a.genre_id = ua.movieGenre_genreId
LIMIT 0,10
这返回类似于:
罗宾汉_ 101 _ 2001 _冒险
罗宾汉_ 101 _ 2001 _行动
罗宾汉_ 101 _ 2001 _戏剧
防火墙_ 98 _ 2003 _行动
防火墙_ 98 _ 2003 _戏剧
我不想重复我已经知道的信息。 我希望它显示如下:
罗宾汉_ 101 _ 2001 _冒险_动作_戏剧
防火墙_ 98 _ 2003 _动作_戏剧
请帮我搞清楚:)
几周前我遇到了这个问题,我的教授给了我一个非常聪明的解决方案:
在子查询中使用Group_Concat函数以逗号分隔值的形式获取结果,然后使用explode / split /等效的语言来循环CSV结果。
http://mahmudahsan.wordpress.com/2008/08/27/mysql-the-group_concat-function/
希望这可以帮助! 这个问题让我感到沮丧一段时间,但我认为这是最简单的解决方案。
SELECT
u.movie_title,
u.movie_runtime,
u.movie_releaseYear,
GROUP_CONCAT(a.genre_name) genre
FROM
movieGenres ua
INNER JOIN movies u ON u.movie_id = ua.movieGenre_filmId
INNER JOIN genres a ON a.genre_id = ua.movieGenre_genreId
GROUP BY
u.movie_title,
u.movie_runtime,
u.movie_releaseYear
LIMIT 0,10
;
这基本上是您的查询。 我刚刚添加了GROUP BY子句和GROUP_CONCAT函数。 默认分隔符是逗号(,)。 如果您希望以空格分隔的流派列表,请使用GROUP_CONCAT函数执行此操作:
SELECT
u.movie_title,
u.movie_runtime,
u.movie_releaseYear,
GROUP_CONCAT(a.genre_name SEPARATOR ' ') genre
FROM
movieGenres ua
INNER JOIN movies u ON u.movie_id = ua.movieGenre_filmId
INNER JOIN genres a ON a.genre_id = ua.movieGenre_genreId
GROUP BY
u.movie_title,
u.movie_runtime,
u.movie_releaseYear
LIMIT 0,10
;
这是数据库工作的方式。 有'方法'可以做你想要的,但老实说,数据库通常不是完成它的正确位置。 这纯粹只是一个临时查询还是将这些结果发送到应用程序? 如果是这样,应用程序将是按照您希望的方式格式化结果的正确位置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.