Mysql SQL-从电影数据库请求获取所有电影及其详细信息
我发现了类似的问题,但最终却大不相同,没有人回答我的问题 我使用mySQL 我有一个表电影\艺术家\角色,像3个表电影、艺术家和包含3个键的角色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)
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%正确的话,我会发布一个更新,但它应该会为你指明正确的方向