多选择筛选查询SQL语句怎么写 100

我现在实现这个筛选查询呢?筛选的数据我都存在一个字段里面,怎么实现,多选不同选择怎么筛选出存在一个字段里面的匹配的数据呢?数据库用到是MYSQL,我用IN()函数,这个是... 我现在实现这个筛选查询呢?筛选的数据我都存在一个字段里面,怎么实现,多选不同选择怎么筛选出存在一个字段里面的匹配的数据呢?数据库用到是MYSQL,我用IN( )函数,这个是一个查询多个,也用过FIND_IN_SET()函数,这个是多个查询单个,都不行,请大神指教。 展开
 我来答
fuyh16
2019-07-26 · TA获得超过222个赞
知道小有建树答主
回答量:462
采纳率:82%
帮助的人:118万
展开全部

我做过类似的查询,就是用字典项表的数据id列,与数据表的字符串列做instr比较,比较时,两个数据分别在前后加',',防止第一个和最后一个字典项无法查找出来。
举个例子,数据表

字典表 dict
id name
12 wifi
13 冰箱
14 洗衣机
15 电视

业务表 query_table
id query_str
1 12,13,14,15
2 12,14
3 14,15

SELECT *
FROM dict a,query_table b
WHERE INSTR(CONCAT(CONCAT(',',b.query_str),','), CONCAT(',', CONCAT(a.id,',')))>-0 AND b.id=1


看实际效果

longrenyingdc8ecb1
2019-07-27 · TA获得超过1万个赞
知道大有可为答主
回答量:6032
采纳率:82%
帮助的人:2347万
展开全部
看你的选择感觉上应该是“选择的全部”,比如,我选了wifi,餐桌,麻将机,那么就必须这三个都有,其他的有或没有不重要,重要的是这三个,也就是说“选择的全部”。
方法想到了三个:
(1)用like+and,无非是 字段 like '%15%' and 字段 like '%17%' and ……,有多少个选择写多少个like,然后根据传进来的参数截取(这部分最好是应该是前台完成,当然写成过程也可以),然后再导入数据库查询。(这个重复查询多,估计效率不会太快)
(2) 直接like也可以,只是这种需要临时拼凑语句,前面的select不说,where后面是:字段 like '%15%21%31%……',把数字中间填上%,这部分要么改变语句传输的间隔符号,要么做一下替换. (个人比较推荐这种方式,但是这种方式要注意排序,顺序是不能乱的,否则查不出来)
(3)你说的in应该不行,至少我不会,但是FIND_IN_SET可以考虑,和like+and差不多,只是又多了一层判断,而且会出现大量的"不等于0",个人觉得并不会十分好用。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wingx12370
2019-07-26
知道答主
回答量:21
采纳率:66%
帮助的人:5.1万
展开全部
数据库操作用什么?如果是用mybatis的话可以写循环一个一个遍历,如下:
<!-- 注意返回的数据类型是集合中保存的数据类型 Employee-->
<select id="getEmpsByConditions" resultType="com.jas.mybatis.bean.Employee">
SELECT * FROM t_employee WHERE id IN
<!--
collection:指定要遍历的集合
item:取出当前集合中元素,赋给 item 中的值
separator:遍历出的多个元素之间用什么分隔符分隔开
open:遍历集合前用什么字符进行拼接
close:遍历集合后用什么字符进行拼接
在 foreach 标签中还有一个属性 index,
遍历集合的时候 index 表示的是当前元素的索引,item 对应索引中的值
遍历 map 的时候 index 表示的是当前 map 中的 key,item 是 key 对应的 value
-->
<foreach collection="list" item="empId" separator="," open="(" close=")">
#{empId}
</foreach>
</select>
如果是其他的就在实现层进行遍历。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hyx0077
2019-07-26 · TA获得超过126个赞
知道小有建树答主
回答量:297
采纳率:63%
帮助的人:44.3万
展开全部
用行列转换吧把fac这字段拆分为多行数据,或者用存储过程执行动态sql比如
begin
declare @t nvarchar(100),@sql nvarchar(100);
set @t= (select '1,2,3,11,12,13' as c)
set @sql='select * from (
select ''1,2,3,11,12,13'' a,''1'' b
union all
select ''21,22,23,4,5,6'' a,''2'' b ) t1'
execute(@sql+' where ''1'' in ('+@t+')')
end
这个只是例子,根据实际情况改用,在sql sever中有个xml可以进行行列转换拆分的。mysql没有研究过
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
卡洛琳1016
2019-07-26 · TA获得超过228个赞
知道小有建树答主
回答量:208
采纳率:78%
帮助的人:54.2万
展开全部
一个字段的筛选条件用模糊查询就行了,你字段里的数字都是排序的,可以用like
比如facilities like '%条件值1%条件值2%条件值3%'
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式