0

在我的 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 语句?

谢谢

4

2 回答 2

1

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

我不费心将字段和子句分开以进行“快速搜索”。(对于一个完整的搜索表单,我为用户可以搜索的每个字段提供了单独的输入。)但是快速搜索是一个简单的 UI。

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

对于输入“千斤顶”:

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'

如果需要,您可以将名字和姓氏字段分开。我的设计更喜欢将它们放在一起,因为我主要只是将全名用于显示目的并且不在乎区别。

于 2013-09-10T03:47:53.273 回答
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%"
于 2013-09-10T03:32:03.273 回答