使用LIKE搜索名称

时间:2010-08-18 18:12:05

标签: php mysql

我有一张包含联系信息的表格。该表有1列与名称相关。它看起来像这样:

Sort Name:
Doe, John
Clinton, Bill
Dooby Doo, Scooby

可悲的是,没有名字/姓氏列,也无法添加。 如果用户输入搜索词“john doe”,有什么方法可以让mysql返回“Doe,John”列作为我的结果?

编辑:作为RHSeeger答案的后续跟进,我该怎么做

john doe 

进入

$name(0=>'john', 1=>'doe')

使用php

感谢目前为止提供的帮助

5 个答案:

答案 0 :(得分:2)

我的想法是:

SELECT * FROM tablename
WHERE LOWER(sort_name) LIKE '%name1%'
  ...
  AND LOWER(sort_name) LIKE '%nameN%'

其中< name1> ...< nameN>是用户要求的名称中的单个小写“单词”(以空格分隔,逗号?)。

编辑:值得注意的是,对于相当大的数据集,这样的搜索会变慢。如果您要获得大量数据,可以考虑使用搜索引擎(如SOLR)来搜索内容,并使用MySQL进行ID查找。

答案 1 :(得分:0)

在您的应用中,将搜索字词拆分到最后一个空格,更改顺序并在其间添加逗号。

答案 2 :(得分:0)

我首先将搜索解析为可分离的单词“john”和“doe”,然后使用LIKE功能为这两个术语编写搜索。

编辑: 从下面的答案中回答你的问题......如何将“John Doe”解析为“John”和“Doe” 我会编写一个MySQL存储过程来将它们分成包含“John”和“Doe”的结果集,然后使用类似于该列名称

答案 3 :(得分:0)

查看sql“like”运算符。例如

select * from TABLENAME
where sort_name like '%doe'

您需要对应用程序端的搜索术语进行一些操作,并可能在sql语句中提供其他条件子句以及其他类似的子句。

答案 4 :(得分:0)

在names列上有一个全文索引,然后执行此操作,

select * from names where match(name) against ('john doe');