2017-09-01 94 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