搜索查询不返回部分查询

时间:2012-01-18 03:12:16

标签: mysql search match

我似乎无法获得有效的搜索查询...这是我当前的查询。 (有人刚刚给了我)

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

返回部分值...除了当你有多个单词时它会中断。 (所以它正在寻找“约翰”但不是“约翰史密斯”)

我花了两天时间通过搜索查询来找到符合我需求的搜索查询,并且还没有能够做到。谁能告诉我我做错了什么? (如如何使用部分单词和多个单词)。

感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

尝试将WHERE子句更改为:

WHERE `username` LIKE '%$search%' OR
      CONCAT(`first_name`,' ',`last_name`) LIKE '%$search%'

这试图匹配 - $search针对username字段 - $search针对first_name last_name

但是,如果$searchJohn Smith(两个空格)等,它将不会安全防范(例如) - 您可能希望在分配之前以某种方式规范化代码端的搜索词它到$search(例如,将一行中两个或多个空格的所有出现转换为一个空格)。