我有这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'
我不确定这是否会对任何人有所帮助。我对如何将它们组合起来感到很困惑。
答案 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