Php 困难的SQL语句。。。四张桌子?
我已经建立了一个数据库,我相信它遵循所有正确的方法,没有冗余数据,等等,如下所示:Php 困难的SQL语句。。。四张桌子?,php,mysql,database,Php,Mysql,Database,我已经建立了一个数据库,我相信它遵循所有正确的方法,没有冗余数据,等等,如下所示: 我希望显示存储在提名表中的数据,但以某个EventID显示,并显示电影名称、年份和奖项名称。我知道基本连接,但这似乎很复杂-因为我是新手。非常感谢任何关于正确处理此问题的方法的帮助,以便我将来能够面对更复杂的问题 它实际上是一个基本连接,因此您应该已经知道:- 首先选择正确的提名,然后加入其他提名: SELECT nominations.nominationid, films.title,
我希望显示存储在提名表中的数据,但以某个EventID显示,并显示电影名称、年份和奖项名称。我知道基本连接,但这似乎很复杂-因为我是新手。非常感谢任何关于正确处理此问题的方法的帮助,以便我将来能够面对更复杂的问题 它实际上是一个基本连接,因此您应该已经知道:- 首先选择正确的提名,然后加入其他提名:
SELECT nominations.nominationid,
films.title,
films.year,
awards.name
FROM nominations
JOIN films
ON films.filmid = nominations.filmid
JOIN awards
ON awards.awardid = nominations.awardid
WHERE nominations.eventid = :event_id
这绝对是构建这些数据的正确方法,因为它将允许您非常简洁地聚合数据。实际上,您要查找的查询是一系列简单的联接:
SELECT
n.*,
f.Year,
f.Title,
a.Name
FROM `nominations` n
INNER JOIN `events` e ON n.EventID = e.EventID
INNER JOIN `films` f ON n.FilmID = f.FilmID
INNER JOIN `awards` a ON n.AwardID = a.AwardID
WHERE n.EventID = ?
事实上,您甚至不需要加入Events表,除非您想从Certures表中检索数据。首先使用立即限定符进行查询,然后从该限定符进行构建。。。如果需要特定的事件ID类型,请转到那里。由于活动和仪式更多的是查找表,您可能需要所有符合条件的提名,所以我实际上将从这里开始
select
JustNominees.*,
f.Title,
f.Year as FilmYear,
a.Name as AwardName
from
( select
n.*,
e.Name as EventName,
c.Year as CeremonyYear
from
Nominations n
join Events e
on n.EventID = e.EventID
join Ceremonies c
on e.CeremonyID = c.CeremonyID
where
e.EventID = WhatEventID ) JustNominees
join Films f
on JustNominees.FilmID = f.FilmID
join Awards a
on JustNominees.AwardID = a.AwardID
学习加入。这些是SQL使用的一个重要部分。一旦select语句生效,请研究视图并使用select语句创建新视图 下面是一个未经测试的使用联接的select语句示例。还请注意,MySQL不是我经常使用的工具,因此对于MySQL,语法可能不正确
SELECT A.Title, A.Year, C.Name, D.EventID
FROM FILMS A
JOIN NOMINATIONS B ON B.FilmID = A.FilmID
JOIN AWARDS C ON C.AwardID = B.AwardID
JOIN EVENTS D ON D.EventID = B.EventID
WHERE EVENTS.EventID = XX
如果所有关系都存在,这将起作用。研究外部联接以提取给定表的所有行,例如FILMS,并在其他表中包含匹配行
一位名叫Joe Celko的作者写了几本关于复杂SQL语句的书。你会发现他的工作很有用
hth显示您使用的查询。你好像快到了;你为什么停下来?!设计看起来不错,但有几个问题可以改进。例如,很难确保Awards.name存储为同一提名实际提名的被提名人的姓名。@ypercube我不确定是否遵循。你能澄清一下吗?谢谢请注意,Awards.name是该奖项的名称,是吗?哦,对不起,该奖项。名称类似于“最佳男主角”,而不是获奖者的名称。我误解了。没问题,这是正确的奖项。这个名字很可能包含最佳男主角。该结构是否存在其他问题?