2016-10-20 147 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