2010-08-18 134 views
1

我有一个包含联系信息的表。该表有1个与名称相关的列。它看起来像这样:使用LIKE搜索名称

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

不幸的是,没有名字/姓氏列,他们不能被添加。 如果用户输入搜索词“john doe”,有没有什么办法可以让我的mysql返回“Doe,John”的列作为我的结果?

编辑:作为后续行动,以通过RHSeeger答案,我会做什么用PHP

感谢您的帮助迄今

使

john doe 

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

回答

2

我的想法是:

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

其中<名1 > ... <nameN>是个人,小写的 “字”,在用户请求的域名(空间分割,逗号?)。

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

+0

我会做拿约翰什么doe into $ name(0 =>'john',1 =>'doe') – clang1234 2010-08-18 18:35:17

+0

我无法在您的评论中回答这个问题,因为我根本不了解PHP。我只是在处理MySQL组件。 – RHSeeger 2010-08-18 18:38:15

+0

explode(“”,“john doe”);会产生一个数组(0 =>“john”,1 =>“doe”) – 2010-08-18 19:17:22

0

在您的应用程序中,将搜索项分割到最后一个空格处,更改顺序并在两者之间添加逗号。

+0

如果用户输入“史酷比dooby”那会失败,但留下了斗 – clang1234 2010-08-18 18:17:11

0

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

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

0

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

select * from TABLENAME 
where sort_name like '%doe' 

您需要做一些操作来搜索词的应用端,并可能在您的SQL语句与其他类似条款提供其他条件子句。

0

对名字列全文索引,然后做到这一点,

​​