gpt4 book ai didi

java - MySQL字符串搜索技术?

转载 作者:行者123 更新时间:2023-11-29 13:36:12 24 4
gpt4 key购买 nike

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

谢谢

最佳答案

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

我懒得为了“快速搜索”而分离字段和子句。 (对于全权重搜索表单,我为用户可以搜索的每个字段都有单独的输入。)但快速搜索是一个简单的 UI。

我不区分大小写。如果这不是您的数据库的默认设置,您可以在匹配之前对字符串使用 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'

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

关于java - MySQL字符串搜索技术?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18710029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com