2016-10-20 148 views
0

Database Layout嵌套的GROUP_CONCAT MySQL?

好吧,说我有一个数据库布局类似于我提供的例子。在上面的例子中,电影有语言版本,而且这些movie_releases在不同的剧院也有剧院版本。

现在,如果我想要查询数据库以获取电影的所有影院版本以及所有movie_releases,那么我该怎么做?

当前的代码我已经是:

select 
     GROUP_CONCAT(movie.name, ",", language.lang, ",", GROUP_CONCAT(theatre.name)) as releases 
from 
    movie 
     left join movie_releases on movie_releases.movie_id = movie.id 
     left join language on movie_release.language_id = language.id 
     left join theatre_release on theatre_release.movie_release_id = movie_release.id 
     left join theatre on theatre.id = theatre_release.theatre_id 

显然,这并不工作,因为你不能嵌套GROUP_CONCAT函数这样。

我所需的输出会是这样的

["Spiderman", "English", ["Cinema Theatre", "Garden Cinemas"]] 
["Spiderman", "Spanish", ["El Cine Grande"]] 
["Batman", "English", ["Town Movies"]] 
+0

结果集的delimiteres。见http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-query – Strawberry

+1

@Strawberry谢谢你没有帮助。 – user2827048

回答

1
SELECT 
    CONCAT(
     '["', `movie`.`name`, '"', 
     ', ', 
     '"', releases.lang, '"', 
     ', [', 
     releases.theatres, 
     ']]' 
    ) AS `release` 
FROM 
    movie 
LEFT JOIN (
    SELECT 
     movie_id, 
     `language`.lang, 
     GROUP_CONCAT('"', theatre.`name`, '"') AS theatres 
    FROM 
     movie_release 
    LEFT JOIN theatre_release ON theatre_release.movie_release_id = movie_release.id 
    LEFT JOIN theatre ON theatre.id = theatre_release.theatre_id 
    LEFT JOIN `language` ON `language`.id = movie_release.language_id 
    GROUP BY 
     movie_id, 
     language_id 
) AS releases ON releases.movie_id = movie.id 

可以组子查询中的剧院,然后由他们对发布有关加入他们到电影。

通过以您的格式引入数据,可能会使查询有点难以阅读。所以这里是没有花哨格式的查询。

SELECT 
    CONCAT(
     `movie`.`name`, 
     ' ', 
     releases.lang, 
     ' ', 
     releases.theatres 
    ) AS `release` 
FROM 
    movie 
LEFT JOIN (
    SELECT 
     movie_id, 
     `language`.lang, 
     GROUP_CONCAT(theatre.`name`) AS theatres 
    FROM 
     movie_release 
    LEFT JOIN theatre_release ON theatre_release.movie_release_id = movie_release.id 
    LEFT JOIN theatre ON theatre.id = theatre_release.theatre_id 
    LEFT JOIN `language` ON `language`.id = movie_release.language_id 
    GROUP BY 
     movie_id, 
     language_id 
) AS releases ON releases.movie_id = movie.id 

要添加你只有不带数据集就像没有棒棒糖棍调整CONCATGROUP_CONCAT