jea*_*rey 6 php mysql sql database sql-server
我必须从SQL运行查询.也许太容易或不容易,但不幸的是我不懂SQL.所以这是我的表:
影片
id | movie_name
------------
1 | prometheus
Run Code Online (Sandbox Code Playgroud)
名
id | person_name
-----------------
1 | Ridley Scott
2 | Noomi Rapace
3 | Michael Fassbender
4 | Charlize Theron
5 | Damon Lindelof
Run Code Online (Sandbox Code Playgroud)
films_cast
id | film_id | person_id | type
-------------------------------
1 | 1 | 1 | director
2 | 1 | 2 | actor
3 | 1 | 3 | actor
4 | 1 | 4 | actor
5 | 1 | 5 | writer
Run Code Online (Sandbox Code Playgroud)
我怎样才能从这些表中得出这样的结论:
film_archive
id | movie_name | director | writer | cast
---------------------------------------------------------------------------------------
1 | prometheus | Ridley Scott | Damon Lindelof | Noomi Rapace, Michael Fassbender, Charlize Theron
Run Code Online (Sandbox Code Playgroud)
谢谢!
您需要加入表格,然后GROUP_CONCAT()在给定合适条件的情况下通过电影在名称列上执行聚合分组:
SELECT f.id,
f.movie_name,
GROUP_CONCAT(IF(c.type='director', n.person_name, NULL)) AS director,
GROUP_CONCAT(IF(c.type='writer', n.person_name, NULL)) AS writer,
GROUP_CONCAT(IF(c.type='actor', n.person_name, NULL)) AS cast
FROM films f LEFT JOIN films_cast c ON c.film_id = f.id
LEFT JOIN names n ON c.person_id = n.id
GROUP BY f.id
Run Code Online (Sandbox Code Playgroud)
在sqlfiddle上看到它.