3

我正在编写一个搜索功能,它需要查询 4 ​​个表。

  • 用户
  • 类型
  • 亚型
  • 提供的服务

我需要对表进行搜索,该users表查询types,subtypesservices offered基于idusers 表中的相应项。

例如:

users 表中的一行可能是这样的:

| id | type | subtype | services_offered | first_name | last_name | contact | company |
| 1  |  1   |    2    |        47        | Gareth     | Davies    | g@g.com | Gazza   |

类型表中的一行可能是这样的:

| id |   type  |
| 1  | finance |

等等...

我已经让它工作了,但由于某种原因,它为每个联系人返回大约 30 行!这是我的 SQL。

SELECT
    c.type, c.subtype, c.first_name, c.last_name, c.company, c.contact, c.services_provided, c.additional_information, c.date_updated,  t.id, t.type, s.id, s.subtype, so.id, so.services_offered 
FROM 
    contacts c, types t, subtypes s, services_offered so 
WHERE 
    ((c.type LIKE '%$q%' || c.subtype LIKE '%$q%' || c.first_name LIKE '%$q%' || c.last_name LIKE '%$q%' || c.company LIKE '%$q%' || c.services_provided LIKE '%$q%' || c.contact LIKE '%$q%' || c.additional_information LIKE '%$q%' || t.type LIKE '%$q%' || s.subtype LIKE '%$q%' || so.services_offered LIKE '%$q%') 
    AND (c.type = t.id || c.subtype = s.id || c.services_provided = so.id))

理想情况下,它只会返回每个联系人中的一个!

任何帮助将不胜感激!

谢谢,

4

1 回答 1

0

一个合理的猜测是您需要对结果进行分组,所以使用

 GROUP BY c.id 

在查询结束时可能会这样做

于 2012-10-31T23:12:26.123 回答