2009-07-07 13 views
1

私は3つのテーブルのイベント、場所、event_locationを持っています。イベントは複数の場所を持つことができます。 ロケーションテーブルにlattitude、longitude、hasGeocodeフィールドがあります。キーワードのようキーワード検索、複数のテーブル、PHPとMySQL、どちらを使う?

の「Hello World」は、イベントテーブルに

単純なクエリが

Select * from event where keywords like '%hello%' OR keywords like '%world%' 

なるが、ユーザがその場所に入ったならば、私もこのクエリでロケーションテーブルを含める場合、ユーザーが自分の場所の選択を指定できるように、どうすればいいですか?

検索のように、本質的に3種類が

  • を問い合わせるだけで、私はこのような何かを試してみました

  • キーワードと場所

  • キーワード、近接及び場所

をキーワード -

select * from event where keywords like '%hello%' OR 
    keywords like '%world%' INNER JOIN location ON 
    location.location_id = event_location.location_id 
    INNER JOIN 
    event_location ON event_location.event_id = event.event_id 

INNER JOINsイベントには1つ以上の場所が必要です。イベントが何らかの場所を持っていない場合は、検索結果に表示されません。だから助けてください、どうすればいいですか?

ありがとうございました。

答えて

2

あなたはすべてを台無しにあなたの結合構文を持っています。いずれにしても、内部結合が切断していない場合は、外部結合を使用します。 ;-)

また、テーブル名が長い場合は、テーブルエイリアスを使用することは悪いことではありません。

+0

これが私の問題を解決しました – Fil

1

使用LEFT JOIN S(私はあなたの加入や紛失されたwhere句の場所を、一定の順序を変更)

select * from event LEFT JOIN event_location ON 
event.event_id = event_location.event_id 
LEFT JOIN 
location ON event_location.location_id = location.location_id 
where keywords like '%hello%' OR 
keywords like '%world%' 

あなたが場所なしでのイベントのNULLを取得しますこの方法です。

また、*を選択し使用しますが、興味のある列に名前を付けないようにしてみてください。

関連する問題