MySQL字符串搜索技术?

时间:2013-09-10 02:54:47

标签: java mysql database search

在我的Android应用程序中,我有一个搜索字段,用户可以在其中键入内容。他们可以在我的数据库中输入他们想要的任何名称,地址,电话号码,电子邮件等等。

我希望它像谷歌搜索中的一个搜索栏一样,所以他们可以输入组合,例如带地址的名称。

问题是如何在搜索文本可以包含多个短语的情况下进行搜索?

例如,如果用户搜索“Jack Daniel jdaniel@hotmail.com”,那么我希望mysql select语句最终会像:

select id from members
where firstname=`Jack` or firstname=`Daniel` or firstname=`jdaniel@hotmail.com`
   or lastname=`Jack` or lastname=`Daniel` or lastname=`jdaniel@hotmail.com`
   or email=`Jack` or email=`Daniel` or email=`jdaniel@hotmail.com`

基本上,搜索文本的每个短语都需要与所有列进行比较。

MySQL是否有内置机制来轻松完成此操作,或者我是否必须在java中解析字符串并手动构建sql语句?

由于

2 个答案:

答案 0 :(得分:1)

用户喜欢“快速搜索”,并且为了实用性,我认为这最适合字符串中的任何位置 - 因此喜欢'%Jack%'条件。

我不打算将字段和字段分开。为快速搜索条款。 (对于全重搜索表单,我为每个字段提供单独的输入,用户可以搜索。)但快速搜索是一个简单的UI。

我不区分大小写。如果它不是您的DB的默认值,则可以在匹配之前对字符串使用lower()函数。

输入'Jacks':

select * from members 
where fullname like '%Jacks%' or email like '%Jacks%'

或者,就像我在FireBird中强制不区分大小写一样:

select * from members 
where lower(fullname) like '%jacks%' or lower(email) like '%jacks%'

这将匹配所有:

fullname='Mike Jackson'
fullname='Jackson Five'
fullname='Lumberjacks R Us'
email='phil@jackstrucking.com'

如果你愿意,你可以将first和lastname字段分开。我的设计更喜欢将它们保持在一起,因为我主要只是使用fullname来显示目的和放大。不要在意区别。

答案 1 :(得分:0)

我认为外卡会对你有所帮助。 看看这里: http://www.w3schools.com/sql/sql_wildcards.asp

我的建议是尝试添加名为FULLNAME的列,例如,然后可以使用以下内容:

select id from members where
fullname='%Jack%' or fullname="%Daniel%" or email="%jack%" or email="%daniel%"