关于一个搜索框多条件查询,请大佬提供一个思路
模拟场景
是这样的,比如有一张会员表,包含字段:姓名
、年龄
、出生年月
、所在城市
、会员编号
、手机号
等信息。
现在需要一个搜索框模糊查询相关会员信息。但是在一个搜索框内完成,而且使用通配符查询
, "_龙"
、"龙_"
、"_龙_"
、"13801380*"
例如:搜索条件如下:
北京
的王姓
用户,手机号是1356528
的会员用户,搜索框的内容如下北京 王_ 1386528*
,根据这条件模糊查询用户。
目前我的做法是只能单字段查询 例如:通过通配符模糊查询姓名,但是其他字段不知道怎么处理,求大神提供一个思路,或者付费实现。
更新一下:
感谢各位大佬的回答:
目前我是使用where 闭包 orwhere 查询的 ,但是效率比较底下.
我尝试过使用concat where like查询
SELECT * FROM `user` WHERE CONCAT_WS(`xm`,`nickname`,`cs`,`dz`,`sjhm`) LIKE '%keywords%'
这种情况 只支持双%号查询 不支持 王_ 138% 这种通配符查询.具体原理我 没搞清楚
然后我还尝试了
SELECT * FROM `user` WHERE CONCAT(`xm`,`nickname`,`cs`,`dz`,`sjhm`) LIKE CONCAT('%keywords%','_keywords','keywords_')
类似这种查询 ,但是这个关键词多了 需要后面的词对应前面的词 ,否则查询结果为空
我这个还有个特殊情况,就是表字段我是不知道的,因为是动态表.所以还要根据关键词(王_ 138% 北京) 先遍历表 模糊查哪些字段含有 字段再组数组 再闭包拼接.
高认可度评论:
搁我,我就干产品了,三个输入框他不好使吗,非得放一个输入框里,况且确定让运营使用通配符吗
expole分段,然后 where like
where 条件用
or
关键字连接就行了CONCAT 了解一下
mysql 全文索引了解一下,不理想直接上大杀器es。
es 走起
如果搜索条件是固定格式的还好处理,如一楼所说! 如果要支持
北京 王_ 1386528*
王_ 1386528* 北京
或者1386528* 北京 王_
,就比较麻烦了,可以考虑上搜索引擎。CONCAT之后,where like
可以参考下Gmail的邮件搜索,但是可能不太适合国内用户
看你这么诚心求问,我就破天机指你几条明路
搁我,我就干产品了,三个输入框他不好使吗,非得放一个输入框里,况且确定让运营使用通配符吗
@pigzzz concat 我试了
类似这种写法 如果关键词多的话 必须对应前面的字段
这样一个关键词的不知道为什么不能使用通配符
@Savey 不能放在一个字段里 因为要通配符查询 放在一个里面就只支持%keywords% 这种查询了
@xjm_ 这种的where like '%keywords%' 不能通配符查询 但是如果多关键词 like concat 只能对应字段才有结果 可以使用通配符 , 目前没找到更好的办法
@好人二狗 复杂情况 不支持设定搜索框 我也知道多个搜索框简单啊
@Jinrenjie 不是固定的 而且我的表字段也是自动生成的 所以 我太难了
花钱的方法 对接市面上的专业检索引擎、es