2013-05-30 6 views
0

у меня есть эти 4 таблиц:Поиск Через несколько таблиц

contacts_address (id, owner_id, address) 
contacts (id, name) 
contacts_groups (id, name) 
contacts_groups_link (contact_id, group_id) 

Каждого контакт имеет свой собственный ряд в contacts. У каждого контакта может быть установлен неограниченный адрес, поэтому contacts_address - это адрес, прикрепленный к контакту по полю «owner_id». Пользователь также может иметь группы. Каждая группа имеет строку в contacts_groups. Когда вы добавляете контакт в группу, он создает запись в contacts_groups_link с этим идентификатором контактов и идентификатором групп.

Мне нужна инструкция запроса, в которой он будет искать по всем контактам в определенной группе по имени и возвращать эти контакты.

Мне также нужна инструкция запроса, в которой он будет искать через все контакты и их прикрепленный адрес в определенной группе и возвращать эти контакты.

Я настолько растерялся, что это сработает.


Вот запрос я использую для поиска через контакты и иметь возможность также осуществлять поиск по их адресам:

SELECT `contacts_address`.*, `contacts`.* 
FROM `contacts` JOIN `contacts_address` ON `contacts_address`.`parent`=`contacts`.`id` 
WHERE `contacts`.`owner`='$user_id' 

Вот запрос я использую, чтобы захватить все контакты в рамках определенной группы:

SELECT * FROM contacts INNER 
JOIN contacts_groups_link ON contacts_groups_link.contact_id = contacts.id 
WHERE contacts_groups_link.group_id='$id' 

Я не уверен, поможет ли это кому-либо. Я так смущен тем, как их сочетать.

+0

Я не знаю, с чего начать. Я столкнулся с некоторым другим кодом MySQL, который у меня есть, который немного относится. –

+0

Поскольку это действительно вопрос SQL, я удалил тег PHP. Кроме того, не следует добавлять в заголовок такие вещи, как 'MySQL:', вместо этого используйте систему тегов. –

ответ

2

Вы ищете что-то вроде этого?

... поиск по всем контактам в определенной группе по имени и возвращают эти контакты

SELECT c.id, c.name 
    FROM contacts c JOIN contacts_groups_link l 
    ON c.id = l.contact_id JOIN contacts_groups g 
    ON l.group_id = g.id 
WHERE g.id = 1 -- << change to appropriate group id 
    AND c.name LIKE '%Jhon%' -- << change to other pattern as needed 

ОБНОВЛЕНО:... поиск по всем контактам и их прикрепленного адрес и возвратить эти контакты

SELECT c.id, c.name 
    FROM contacts c JOIN contacts_groups_link l 
    ON c.id = l.contact_id JOIN contacts_groups g 
    ON l.group_id = g.id JOIN contacts_address a 
    ON c.id = a.owner_id 
WHERE g.id = 1 -- << change to appropriate group id 
    AND a.address LIKE '%Main St.%' -- << change to other pattern as needed 
GROUP BY c.id, c.name 
+0

Crap Извините. Первый - это именно то, что я хочу, но второй, я забыл что-то в описании того, что мне нужно. «... найдите все контакты и их прикрепленный адрес в СПЕЦИФИЧЕСКОЙ ГРУППЕ и верните эти контакты» –

+0

@TylerDusty Обновлен ответ. – peterm

Смежные вопросы