我似乎无法获得有效的搜索查询...这是我当前的查询。 (有人刚刚给了我)
SELECT MATCH (username, first_name, last_name) AGAINST ('$search') AS relevance, DISTINCT(auto), user_id, username, first_name, last_name, email, sex, active, ppic, time_zone, adult_filter, ((CASE WHEN `username` LIKE '%$search%' THEN 2 ELSE 0 END) + (CASE WHEN `first_name` LIKE '%$search%' THEN 1 ELSE 0 END) + (CASE WHEN `last_name` LIKE '%$search%' THEN 1 ELSE 0 END)) AS relevance
FROM users, network WHERE MATCH (username, first_name, last_name) AGAINST ('$search' IN BOOLEAN MODE) ORDER BY relevance DESC, username
哪个有效,除了它不会返回部分匹配,这是我需要发生的事情。
这是我的旧查询...
SELECT DISTINCT(auto), user_id, username, first_name, last_name, email, sex, active, ppic, time_zone, adult_filter, ((CASE WHEN `username` LIKE '%$search%' THEN 2 ELSE 0 END) + (CASE WHEN `first_name` LIKE '%$search%' THEN 1 ELSE 0 END) + (CASE WHEN `last_name` LIKE '%$search%' THEN 1 ELSE 0 END)) AS relevance
FROM users, network
WHERE `username` LIKE '%$search%' OR
`last_name`LIKE '%$search%'
OR `first_name` LIKE '%$search%'
ORDER BY relevance DESC, username LIMIT 5
返回部分值...除了当你有多个单词时它会中断。 (所以它正在寻找“约翰”但不是“约翰史密斯”)
我花了两天时间通过搜索查询来找到符合我需求的搜索查询,并且还没有能够做到。谁能告诉我我做错了什么? (如如何使用部分单词和多个单词)。
感谢任何帮助,谢谢。
答案 0 :(得分:0)
尝试将WHERE
子句更改为:
WHERE `username` LIKE '%$search%' OR
CONCAT(`first_name`,' ',`last_name`) LIKE '%$search%'
这试图匹配
- $search
针对username
字段
- $search
针对first_name last_name
。
但是,如果$search
为John Smith
(两个空格)等,它将不会安全防范(例如) - 您可能希望在分配之前以某种方式规范化代码端的搜索词它到$search
(例如,将一行中两个或多个空格的所有出现转换为一个空格)。