2017-09-01 16 views
1

私のPHPアプリケーションにSELECTクエリを書くのが苦労しています。状況は次のとおりです。関連するテーブルから条件があるテーブルから値を選択するためのSQLクエリ

私はテーブルCONTESTと一対多の関係でテーブルADDRESSを持っています。この関係は、接続表ContestHasAddressを介して行われます。 CONTESTテーブルには、DATEテーブルとの多対多の関係が、接合テーブルContestHasDateを使用しています。

ADDRESSテーブルからすべての列をSELECTしようとしましたが、そのCONTEST(ADDRESSに関係する人)のDATEのcolumn1が特定のVALUEより大きくなっています。 phpmyadminのリレーションビューを下に示したlinkeを付けました。

私はそれを試してみましたが、それはあなたがDateテーブルを取得するテーブルの関係のすべてを確立するJOIN Sを使用する必要が失敗

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

Link showing the table design

+3

今日のヒント:現代的で明示的な 'JOIN'構文に切り替えてください。 (エラーなしで)書きやすく、読みやすく(維持しやすい)、必要に応じて外部結合に変換する方が簡単です。 – jarlh

+0

SQLで "* relations *"はどのようにコード化されていますか?あなたは知っていますか? –

答えて

0

ました。次に、値を比較することができます。

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 
関連する問題