【散分】【技术分享】骚操作:利用sql里面的like语句实现精确查找—查询一个session用户id是否在某个字段的字符串里面

haohao7118 2020-03-09 09:14:35
【散分】【技术分享】骚操作:利用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)的数据,确实太高明了!
...全文
502 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hookee 2020-03-21
  • 打赏
  • 举报
回复
haohao7118 2020-03-20
  • 打赏
  • 举报
回复
散分,大家看不上么?
怎么没有人回复呢

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧