Как сформировать SQL-запрос для отношения один ко многим? - PullRequest
0 голосов
/ 26 ноября 2010

У меня есть две таблицы MySQL: house и features.Это для сайта недвижимости.

house имеет такую ​​структуру:

id | address | ... some other fields

features имеет такую ​​структуру:

id | house_id | feature | value

, как вы можете догадатьсядом может иметь несколько функций, поэтому существует отношение 1: n.

Теперь я реализую форму поиска домов.Мне нужно отфильтровать результаты на основе функций, выбранных пользователем.

Пример сценария: получить все дома, которые имеют функции garage и garden, и список объектов в этих домах.

Каков наилучший запрос для удовлетворения моих потребностей?Я не знаком с операциями JOIN, поэтому мне нужна ваша помощь!

(ДОПОЛНИТЕЛЬНО) Если вы можете предоставить решение для Yii Framework, это было бы здорово:)

Ответы [ 3 ]

0 голосов
/ 26 ноября 2010

Если вам нужно только столбцы из таблицы House :

SELECT * из ДОМА, где ID в (ВЫБЕРИТЕ ID из ФУНКЦИЙ, где FEATURE IN ('САД)',' GARAGE '));

Если вам нужны все детали:

ВЫБРАТЬ * ИЗ ДОМА H ОБЪЕДИНЯТЬ ФУНКЦИИ F НА H.HOUSE_ID = F.HOUSE_ID ГДЕ ФУНКЦИЯ В (' САД ')'ГАРАЖ');

0 голосов
/ 02 декабря 2010

Вам не нужно присоединяться к нему вручную, если вы используете Yii.

Проще, если вы используете MySQL (поверх SQLite) и таблицы InnoDB (над таблицами MyISAM).

Вам необходимо создать внешний ключ от Feature (столбец house_id) до Houses (столбец house_id)

Если вы строите свою модель с помощью Gii, то она автоматически создаст для вас функцию «отношение».

Затем в Yii вы должны вызвать House-> features, чтобы получить массив строк объектов.

Вы можете передать объект CDbCriteria в вызове Fill () для фильтрации домов, выбранных пользователем.

0 голосов
/ 26 ноября 2010
SELECT * 
FROM HOUSE H JOIN FEATURES F ON H.HOUSE_ID = F.HOUSE_ID
WHERE FEATURE IN ('GARDEN','GARAGE');
...