Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL-从电影数据库请求获取所有电影及其详细信息_Mysql_Sql - Fatal编程技术网

Mysql SQL-从电影数据库请求获取所有电影及其详细信息

Mysql SQL-从电影数据库请求获取所有电影及其详细信息,mysql,sql,Mysql,Sql,我发现了类似的问题,但最终却大不相同,没有人回答我的问题 我使用mySQL 我有一个表电影\艺术家\角色,像3个表电影、艺术家和包含3个键的角色 mo_id ar_id ro_id. 该表包含 mo_id mo_title ro_id ro_name (actor or producer for instance) 表中包含 ar_id ar_name 表角色包含 mo_id mo_title ro_id ro_name (actor or producer for instance)

我发现了类似的问题,但最终却大不相同,没有人回答我的问题

我使用mySQL

我有一个表电影\艺术家\角色,像3个表电影、艺术家和包含3个键的角色

mo_id
ar_id
ro_id.
该表包含

mo_id
mo_title
ro_id
ro_name (actor or producer for instance)
表中包含

ar_id
ar_name
表角色包含

mo_id
mo_title
ro_id
ro_name (actor or producer for instance)
我想展示电影列表,以及每部电影的演员和导演

最有效的方法是什么?在一个具有多个左连接的唯一查询中是否可能

谢谢

我有一个类似的电影数据库!我认为你定义的“角色”表是不必要的——我有一个单独的“导演”表,直接链接到“电影”表:同一部电影很少有两个导演,当有(如科恩兄弟)时,他们往往经常一起工作,所以他们可以被视为一个导演


使用左连接而不是内部连接可以显示没有导演或演员链接的电影。

多个
内部连接(将从所有3个表中提取所有内容)在连接的
外键之间
将显示每个电影、演员和导演的信息列表

SELECT * FROM movie_artist_role mar
INNER JOIN movie m ON mar.mo_id = m.mo_id
INNER JOIN artists a ON mar.ar_id = a.ar_id
INNER JOIN role r ON mar.ro_id = r.ro_id
ORDER BY m.mo_title, r.role_name
使用
WHERE
子句可以为您提供有关该电影或演员的详细信息。例如

SELECT * FROM movie_artist_role mar
INNER JOIN movie m ON mar.mo_id = m.mo_id
INNER JOIN artists a ON mar.ar_id = a.ar_id
INNER JOIN role r ON mar.ro_id = r.ro_id
WHERE a.ar_name = 'Jack Black' ORDER BY m.mo_title, r.role_name
如果您只需要特定表格中的特定数据,请说
film
,然后。。。这与上面所做的差不多,但恰恰相反

SELECT * FROM movie m
INNER JOIN movie_artist_role mar ON mar.mo_id = m.mo_id
INNER JOIN artists a ON mar.ar_id = a.ar_id
INNER JOIN role r ON mar.ro_id = r.ro_id
ORDER BY m.mo_title, r.role_name
艺术家

SELECT * FROM artists a
INNER JOIN movie_artist_role mar ON mar.ar_id = a.ar_id
INNER JOIN movie m ON mar.mo_id = m.mo_id
INNER JOIN role r ON mar.ro_id = r.ro_id
ORDER BY m.mo_title, r.role_name

etc等

左连接应该可以正常工作

SELECT m.mo_title AS movie_title, 
       (SELECT group_concat(aIn.ar_name)
        FROM movie_artist_role AS marIn
            LEFT JOIN role AS rIn ON rIn.ro_id = marIn.ro_id
            LEFT JOIN artist AS aIn ON aIn.ar_id = marIn.ao_id
        WHERE rIn.ro_name = 'producer'
            AND marIn.mo_id = m.id ) AS producers,

       (SELECT group_concat(aIn.ar_name)
        FROM movie_artist_role AS marIn
            LEFT JOIN role AS rIn ON rIn.ro_id = marIn.ro_id
            LEFT JOIN artist AS aIn ON aIn.ar_id = marIn.ao_id
        WHERE rIn.ro_name = 'actor'
            AND marIn.mo_id = m.id ) AS actors
FROM movie AS m
这是未测试的,但应返回以下行:

movie_title       |      producers       |     actors
-----------------------------------------------------------
Star Treck          JJ Abrams               Chris Pine, Simon Pegg, Zachery

听起来这可能是家庭作业。到目前为止你试过什么?是的,但你也有制片人等等。。。他们可以是同一个艺术家,同一个艺术家person@cam:那又怎样?您所建议的模式意味着您需要在“艺术家”表上进行多个联接,以表示演员、导演和制作人。好的,查询工作得很好,我可以看到我得到的表,但如何使用它正确显示它?我必须对这个结果进行其他查询?感谢Newman的帮助,但我必须说我有点迷路了:)@Cam您可以将任何
查询
放入
存储过程
,然后使用另一个带有
where
子句的查询来提取从
sp
返回的信息。在这种情况下,我需要所有的胶片,问题是要正确显示我得到的结果…@Cam我已经更新了特定表格的答案。:)那应该能满足你的需要。所以我得到了3行电影台词,2行演员台词,1行导演台词。如何有效地提取数据以方便显示?i、 e.foreach电影、echo电影[id][director]等……我对我希望的答案进行了大量编辑,以满足您的需求。我会在早上测试它,如果它不是100%正确的话,我会发布一个更新,但它应该会为你指明正确的方向