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使用该联系人 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'

我不确定这是否会帮助任何人。我很困惑如何将它们结合起来。

4

1 回答 1

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
于 2013-05-30T04:03:59.290 回答