2017-09-01 61 views
1

我努力在我的PHP应用程序中编写SELECT查询。情况如下:SQL查询从条件是从相关表中选择值

我有表地址与表CONTEST的一对多关系。关系是通过联结表ContestHasAddress。 CONTEST表通过联结表ContestHasDate与DATE表具有多对多关系。

我试图从ADDRESS表中选择所有列WHERE与其CONTEST相关的DATE的column1(与ADDRESS相关的人)比特定的VALUE更大。我附上下面的linke显示phpmyadmin的关系视图。

我试过,但它是一个失败

SELECT address.* 
FROM address, 
    contest, 
    date 
WHERE address.contest.dates[0].start_time > TIMESTAMPVALUE 

Link showing the table design

+3

今天提示:切换到现代的,明确的'JOIN'语法。易于编写(没有错误),更易于阅读(和维护),并且在需要时更容易转换为外部联接。 – jarlh

+0

SQL中如何编写“*关系*”?你知道吗? –

回答

0

您需要使用JOIN s到建立所有的表关系的才能到Date表。然后,您可以比较这些值:

Select A.* 
From Address     A 
Join Contest_Has_Address  CA On A.Id = CA.Address_Id 
Join Contest     C On C.Id = CA.Contest_Id 
Join Contest_Has_Date  CD On C.Id = CD.Contest_Id 
Join Date     D On D.Id = CD.Date_Id 
Where D.Start_Time > TIMESTAMPVALUE 
+0

非常感谢!这是完美的。 – LukaB

0

您需要使用“连接表”连接表。我假定Startime是DateTime字段而不是Int。

Select address.* from Address inner join ContestHasAddress 
on Address.ID = Contest_Has_Address.address_ID INNER JOIN 
Contest_Has_Date on Contest_Has_Address.ContestID = Contest_Has_Date.contestID 
inner join date on Contest_Has_Date.DateId = Date.ID 
where StartTime > TIMESTAMPVALUE