我在一个表中有一个包含用户详细信息的数据库,并在另一个表中链接了联系人详细信息(其中联系人详细信息存储为"内容")。
我正在尝试制作快速搜索功能,您可以在其中搜索姓名或任何联系方式。因此,您可以搜索姓名或电子邮件或电话(联系人详细信息字段中的任何内容)。
这是我到目前为止所做的:
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"。
如何返回电话号码或电子邮件(来自列"内容")或完整的first_name,' ',last_name取决于搜索是匹配名称还是contact_detail.content。
由于我在first_name或last_name上搜索,因此搜索适用于" joh"匹配"约翰"但是当你搜索" John Stan"约翰斯坦利"。是否有Mysql修复方法,或者我是否需要先清理字符串,如果有空格则进行替代搜索(分别搜索first_name和last_name)
任何建议都会受到高度赞赏,因为我已经为此困难了好几天。
答案 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可能会给你一些想法/让你走上正轨。