Mysql:条件选择/连接取决于列匹配

时间:2016-10-21 15:02:30

标签: mysql sql

我在一个表中有一个包含用户详细信息的数据库,并在另一个表中链接了联系人详细信息(其中联系人详细信息存储为"内容")。

我正在尝试制作快速搜索功能,您可以在其中搜索姓名或任何联系方式。因此,您可以搜索姓名或电子邮件或电话(联系人详细信息字段中的任何内容)。

这是我到目前为止所做的:

SELECT DISTINCT leads.id, CONCAT(first_name,' ', last_name) AS name
FROM `leads` 
INNER JOIN `contact_details` ON contact_details`.`lead_id` = `leads`.`id` 
WHERE ((CONCAT(first_name, last_name, content) LIKE ('%[XXX]%')));

这很好用。你可以搜索f ex" 55"并且它将返回命中数字555-573-3222,或者您可以搜索名称字符串,如' Joh'它将匹配约翰逊'

我的问题是,无论您要搜索什么,返回的是客户名称。由于这是一个自动完成功能,这显然非常令人困惑。如果您开始输入555-2,您希望看到建议555-221-6362不是" John Johnson"。

  1. 如何返回电话号码或电子邮件(来自列"内容")或完整的first_name,' ',last_name取决于搜索是匹配名称还是contact_detail.content。

  2. 由于我在first_name或last_name上搜索,因此搜索适用于" joh"匹配"约翰"但是当你搜索" John Stan"约翰斯坦利"。是否有Mysql修复方法,或者我是否需要先清理字符串,如果有空格则进行替代搜索(分别搜索first_name和last_name)

  3. 任何建议都会受到高度赞赏,因为我已经为此困难了好几天。

2 个答案:

答案 0 :(得分:1)

Charliez,根据我们的评论对话,以下是如何做一些嵌套if / thens以及突破where的示例。你需要调整它以满足你的特定需求,但是应该给你足够的一个例子,你应该能够让事情发挥作用。

SELECT
  IF(last_name LIKE '%JAM%', 
    last_name, 
    IF(first_name LIKE '%JAM%', 
       first_name, 
       ''
      )
    ) AS MatchedFieldText
FROM employee
WHERE 
  last_name LIKE '%JAM%' 
  OR first_name LIKE '%JAM%';

答案 1 :(得分:0)

1)我认为没有办法让SELECT语句根据OR返回不同的内容。我首先想到的就是返回first, last, content并使用一些正则表达式来确定是否应该显示名称或数字/内容。

2)有点难题,我认为我没有看到完美的解决方案。 This可能会给你一些想法/让你走上正轨。