搜索多个表格

时间:2013-05-30 03:50:11

标签: mysql sql search

我有这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中创建一个条目,其中包含联系人ID和组ID。

我需要一个查询语句,它将按名称搜索特定组中的所有联系人并返回这些联系人。

我还需要一个查询语句,它将搜索特定组中的所有联系人及其附加地址,并返回这些联系人。

我对如何运作非常困惑。


以下是我用于搜索联系人的查询,并且还可以搜索他们的地址:

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'

我不确定这是否会对任何人有所帮助。我对如何将它们组合起来感到很困惑。

1 个答案:

答案 0 :(得分: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