2010-11-26 5 views
0

나는 두 개의 MySQL 테이블을 가지고있다 : housefeatures. 이것은 부동산 웹 사이트를위한 것입니다.일대 다 관계에 대한 SQL 쿼리를 구성하는 방법은 무엇입니까?

id | address | ... some other fields 

features이 구조를 가지고 : 당신이 추측 수

id | house_id | feature | value 

는, 집이 여러 기능을 할 수 있도록 1 : N 관계가 존재

house이 구조를 가지고있다.

이제 집에 대한 검색 양식을 구현하고 있습니다. 사용자가 선택한 기능을 기반으로 결과를 필터링해야합니다.

예제 시나리오 : garagegarden 기능이있는 모든 주택 및 해당 주택의 기능 목록을 가져옵니다.

내 요구 사항에 가장 적합한 쿼리는 무엇이 될까요? 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

좋아, 정원과 차고가 모두있는 집을 원한다면 어떻게해야합니까? 귀하의 문의는 정원 또는 차고가있는 주택을 제공합니다. 미리 감사드립니다! –

0

당신이 하우스 테이블에서 열이 필요한 경우 :

을 SELECT * HOUSE에서 ID가있는 곳 (FEATURE에서 ID 선택 ('GARDEN', 'GARAGE'));

는 전체 세부 사항이 필요한 경우 :

SELECT * HOUSE H FROM 가입은 H.HOUSE_ID = F.HOUSE_ID WHERE FEATURE ('정원', '차고')에서 위에 F 특징;

0

Yii를 사용하는 경우 수동으로 가입 할 필요가 없습니다.

MySQL (SQLite 이상)을 사용하고 InnoDB 테이블 (MyISAM 테이블 이상)을 사용하면 더 쉽습니다.

당신은 집 (house_id 열)

당신이 GII를 사용하여 모델을 구축 할 경우, 자동으로 당신을 위해 "관계"기능을 만듭니다에 기능 (house_id 열)에서 외부 키를 만들어야합니다.

그런 다음 Yii에서 House-> features를 호출하여 피쳐 행의 배열을 가져옵니다.

Fill() 호출에서 CDbCriteria 개체를 전달하여 사용자가 선택한 집을 필터링 할 수 있습니다.

+0

잘 알고 있지만, 질문에 지정된 것처럼 House 테이블의 특정 행만 찾고 있습니다. 그 일을 어떻게 하죠? –

+0

다음 제목을 변경해야합니다. –

+0

또한 DB 디자인이 정상이 아닙니다. "룸", "롬", "룸", "룸즈"와 같은 다양한 기능 이름을 가질 수 있습니다.이것은 훌륭한 디자인이 아닙니다. 의도 한대로 열만 사용하면됩니다. –

관련 문제