求解一个关于sql多个or查询

[复制链接]
查看11 | 回复7 | 2021-1-27 05:54:18 | 显示全部楼层 |阅读模式
我要求实现的效果:我选了a,和b条件,那么符合这两个其中任意一个条件就会被查出来,假如还有一条条件是c的,那么我选了a,b条件,条件为c的就不应该被查出来才对,可是他还是出来了,大哭。脑袋短路了哪位大哥大姐能给我指点指点。


我是这样写的,
select*fromdede_competitionwhere(classifylike'%$classify%')or(levellike'%$level%')or(rewardlike'%$reward%')or(`ability`like'%$ability%')or(`DDL`like'%$ddl%')ORDERBY`signupTime`DESC
在前端页面用ajax传的几个参数过去查询的
分 -->
回复

使用道具 举报

千问 | 2021-1-27 05:54:18 | 显示全部楼层
你不是知道or是符合其中任意一个条件就会被查出来的吗?
而且你用的还是模糊查询(like)
那你怎么能认定含有a、b的记录中就一定不含有c呢?
何况你的sql指令是写死的
对于条件classifylike'%$classify%'
如果$classify为空(因为没选中),就变成了classifylike'%%'
而classifylike'%%'这样的条件表达式是恒成立的
回复

使用道具 举报

千问 | 2021-1-27 05:54:18 | 显示全部楼层
我只要符合其中任意一个就查出来,我选了a,b,那么a,b中还含有c,也会出来,这是我想要的结果。你说我sql是写死的,如果参数值为空就恒成立,那怎么让他动态来写sql
回复

使用道具 举报

千问 | 2021-1-27 05:54:18 | 显示全部楼层
我把sql放到数据库去执行了,得出的结果是我想要的,可是在页面参数被编译了,怎么解决呢


回复

使用道具 举报

千问 | 2021-1-27 05:54:18 | 显示全部楼层
查询的逻辑表达式:
(aorb)or(not(aorb)andc)
回复

使用道具 举报

千问 | 2021-1-27 05:54:18 | 显示全部楼层
引用3楼cgnine的回复:我把sql放到数据库去执行了,得出的结果是我想要的,可是在页面参数被编译了,怎么解决呢


去掉相应的编码函数,或者再用一个解码函数还原,可参考:
http://netwjx.github.io/blog/2012/07/07/encode-and-decode-unicode-escape-string/
回复

使用道具 举报

千问 | 2021-1-27 05:54:18 | 显示全部楼层
引用5楼neorobin的回复:Quote: 引用3楼cgnine的回复:
我把sql放到数据库去执行了,得出的结果是我想要的,可是在页面参数被编译了,怎么解决呢


去掉相应的编码函数,或者再用一个解码函数还原,可参考:
http://netwjx.github.io/blog/2012/07/07/encode-and-decode-unicode-escape-string/


谢谢
回复

使用道具 举报

千问 | 2021-1-27 05:54:18 | 显示全部楼层
谢谢各位了~~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行