Как я могу связать несколько записей с другой записью в другой таблице?

#php #mysql #database

#php #mysql #База данных

Вопрос:

Я создаю сайт, где люди могут сдавать в аренду свой дом. В настоящее время в моей базе данных есть две таблицы.

Свойства
— property_id
— адрес
— город

Удобства
— amenity_id
— amenity_name

Администратор сайта имеет возможность добавлять удобства в базу данных. Арендодатель входит на сайт, где у него есть возможность выбрать, какие удобства есть в его собственности (например, домашние животные, мебель).

Я пытаюсь найти способ связать одно или несколько удобств с одним единственным свойством. Я предполагаю, что мне нужна третья таблица, которая каким-то образом будет отслеживать, какие удобства связаны со свойствами.

Как я могу связать несколько идентификаторов amenity_id с одним идентификатором property_id?

Ответ №1:

Создайте таблицу свойств, состоящую всего из двух столбцов:

 property_id
amenity_id
  

Первичный ключ должен состоять как из property_id, так и из amenity_id. Вы также можете добавить user_id и поле update_date, если аудит важен.

Это позволит вам связать свойство со многими удобствами.

связь внешнего ключа должна быть между:

 Properties.property_id and PropertyAmentity.property_id
Amentities.amenity_id and PropertyAmenity.amenity_id
  

Пример:

 Property:
property_id  address             city
100          Property 1 St.      NY
101          Property 2 St.      NY

Amenity:
amenity_id   amenity_name
100          Central Air
200          Swimming Pool

PropertyAmenity
property_id   amenity_id
100           100
100           200
101           100
  

В приведенном выше примере свойство 1 имеет как центральное кондиционирование, так и бассейн, в то время как свойство 2 имеет только центральное кондиционирование.

Чтобы выбрать удобства для данного свойства, вы можете написать sql, например:

 Select a.* from Property p, PropertyAmenity pa, Amenity a
where p.property_id = pa.property_id
and pa.amenity_id = a.amenity_id
and p.property_id = 100
  

Комментарии:

1. Прежде всего, спасибо за помощь! Я вроде понимаю, что вы говорите, но мне трудно все это визуализировать. Не могли бы вы, пожалуйста, показать мне пример со значениями для разных таблиц, чтобы я мог видеть, как они соотносятся друг с другом? Кроме того, какой оператор sql необходим для ВЫБОРА всех удобств для определенного свойства? Я не совсем понимаю приведенный вами пример кода.

2. Спасибо за отличный пример! Ваш пример кода php? Я не уверен, что не распознаю некоторые команды, такие как буквы «a» и «pa». Что это такое?

3. в качестве примера приведены примеры данных, которые у вас будут в таблице, и sql для выбора удобств объекта. Я верю, что это то, о чем вы просили.