Каков наилучший способ получения нескольких данных на основе заданных идентификаторов в MySQL? - PullRequest
0 голосов
/ 03 мая 2018

У меня есть три таблицы

Table1: Places (a place can have multiple contacts)
Columns: place_id, place_name, ...

Table2: Contacts (a contact can visit multiple places)
Columns: contact_id, contact_name, ...

Table3: PlacesContacts
Columns: id, place_id, contact_id

тогда я хочу получить всех пользователей из определенного места, тогда я могу сделать что-то вроде

select * from PlacesContacts where place_id = 3

Я получу все contact_id's, что мне нужно, но я также хочу получить все данные contact_id's из таблицы Contacts.

Каков наилучший способ достичь этого? Любая помощь будет высоко ценится.

Ответы [ 4 ]

0 голосов
/ 03 мая 2018

Я предполагаю, что отношение между таблицами - местами и контактами - это m: n. (Проверьте № 1, если вы понятия не имеете, что такое отношение «м-н») Тогда вам поможет ответ Тима Бигелейзена.

Иначе, если это отношение 1: n. Возможно, вам следует добавить place_id в таблицу контактов и удалить PlacesContacts.

1 - Значение «n: m» и «1: n» в дизайне базы данных

0 голосов
/ 03 мая 2018

ваш contact_id из PlaceContacts взят из таблицы контактов, не так ли? тогда вы можете присоединиться к этим 2 таблицам

select PlacesContacts.*,Contacts.* from PlacesContacts
inner join Contacts on Contacts.contact_id=PlacesContacts.contact_id
 where place_id = 3
0 голосов
/ 03 мая 2018

Вы можете использовать простое выражение INNER JOIN:

SELECT PlacesContacts.*, Contacts.* 
FROM PlacesContacts 
INNER JOIN Contacts 
ON PlacesContacts.contact_id = Contacts.contact_id
WHERE PlacesContacts.place_id = 3;

Спасибо

0 голосов
/ 03 мая 2018

Использовать объединение:

SELECT pc.*, c.*
FROM PlacesContacts pc
INNER JOIN Contacts c
    ON pc.contact_id = c.contact_id
WHERE pc.place_id = 3;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...