【散分】【技术分享】骚操作:利用sql里面的like语句实现精确查找—查询一个session用户id是否在某个字段的字符串里面
【散分】【技术分享】骚操作:利用sql里面的like语句实现精确查找—查询一个session用户id是否在某个字段的字符串里面
如题,不敢独享,分享出来,也许有人用的上。
【问题描述】
如何用sql语句查询一个session用户id是否在一个表的某个字段的字符串里面。
如:我的数据库bbs表有一个字段名为arrayuserid,存放若干用户id号的一个数组,值为1,10,20,31,14,25,36。
我想查询用户id=1 (假设session("userid")=1)是否在这个数组里的记录。
【我的两种写法】
一、 sql="SELECT * FROM bbs where arrayuserid like '%"&session("userid")&"%' "
二、 sql="SELECT * FROM bbs where "&session("userid")&" in arrayuserid"
【错误分析】
很显然,上述两种写法都不能实现上述要求。
第一种会将id带1(假设session("userid")=1)的记录都找出来,因为like语句里面的“%”表示通配符。
第二种找不到任何记录。经过测试,in语句支持这种写法:sql="SELECT * FROM bbs where "&session("userid")&" in (1,10,20,31,14,25,36)" ,但是这样没法实现库查询。请问高手第二种in语句写法如果修改才可用?麻烦跟贴补充,谢谢!
【正确写法】
问了下度娘,有高人给出下面的写法:
sql = "SELECT * FROM a where ','+arrayuserid+',' like '%,"&Session("userid")&",%'"
相当于是构造了这样的like:
,1,10,20,31,14,25,36, like ,1,
这样利用构造的变量结合like语句,无论session("userid")在数组的开头还是结尾,都能实现精确查找,而不会匹配到所有带1(假设session("userid")=1)的数据,确实太高明了!