2010-11-26 12 views
0

私は2つのMySQLテーブル:housefeaturesを持っています。これは不動産ウェブサイトのためのものです。1対多の関係のSQLクエリを作成するにはどうすればよいですか?

houseは、この構造を有する:

id | address | ... some other fields 

featuresは、この構造を有する:

id | house_id | feature | value 

あなたが推測できるように、家が複数の機能を持つことができるので、1:nの関係が存在します。

今、私は家の検索フォームを実装しています。ユーザーが選択した機能に基づいて結果をフィルタリングする必要があります。

サンプルシナリオ:フィーチャー​​とgardenを持つすべての住宅と、それらのフィーチャーのリストを取得します。

私のニーズに合わせて最適なクエリは何でしょうか?私はJOINの操作に精通していないので、私はあなたの助けが必要です!

(オプション)のYiiフレームワーク固有のソリューションを提供できる場合、それは素晴らしいだろう:)

+0

私はよく知っています:(私はもっと頻繁に掛かっていなければなりません) –

答えて

0
SELECT * 
FROM HOUSE H JOIN FEATURES F ON H.HOUSE_ID = F.HOUSE_ID 
WHERE FEATURE IN ('GARDEN','GARAGE'); 
+0

偉大な作品、ありがとう!:) –

+0

OK、庭とガレージの両方が必要な場合はどうすればいいですか?あなたの質問には、庭園またはガレージが付いた家があります。前もって感謝します! –

0

あなたはハウステーブルからのみ列が必要な場合:

をSELECT * HOUSEのIDはどこにありますか?(SELECTからのIDはFEATURESの中でFEATURE IN( 'GARDEN'、 'GARAGE'));

あなたが全体の詳細が必要な場合:

SELECT * FROM HOUSE H のJOINはH.HOUSE_ID = F.HOUSE_ID WHERE FEATURE( 'GARDEN'、 'GARAGE')のオンF特長。

0

Yiiを使用している場合は、手動で参加する必要はありません。

MySQL(SQLite以上)を使用し、InnoDBテーブル(MyISAMテーブルを使用)を使用する方が簡単です。

あなたが住宅(house_id列)

あなたはGIIを使用してモデルを構築した場合、それは自動的にあなたのための「関係」関数を作成しますと特長(house_id列)から外部キーを作成する必要があります。

Yiiでは、House-> featuresを呼び出してフィーチャ行の配列を取得します。

Fill()呼び出しでCDbCriteriaオブジェクトを渡して、ユーザーが選択した住宅をフィルタリングできます。

+0

私はそれに精通していますが、私は質問で指定したように、ハウステーブルの特定の行だけを探しています。それをどうやってやりますか? –

+0

タイトルを変更する必要があります。 –

+0

また、あなたのdbデザインは正常ではありません。あなたは "部屋"、 "ROM"、 "部屋"、 "ルームズ"のような様々な類似の機能名を持つことができます。これは素晴らしいデザインではありません。意図したように列を使用するだけです。 –

関連する問題