参数查询语句嵌套问题

image.png

我想实现在参数为空的基础上,根据fine_username的值对地区进行过滤,如果fine_username=sa,则地区不过滤,如果fine_username !=sa,则地区的值=fine_role

我写的在参数为空的时候什么也查不出来啊??求赐教!

FineReport judy爱吃鬼 发布于 2019-12-11 14:57
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共6回答
最佳回答
0
aaaa啊啊啊啊Lv3初级互助
发布于2019-12-11 15:03

模板可否发一下

最佳回答
0
18038635057Lv4初级互助
发布于2019-12-11 15:03

你看下日志最终sql是什么,有没有错,没有错的话这语句能不能查到数据

最佳回答
0
shirokoLv6资深互助
发布于2019-12-11 15:06(编辑于 2019-12-11 15:28)
SELECT * FROM SALES_BASIC
where 1=1
${if(len(销售员)==0 && fine_username<>'sa'," and 地区 in ('"+fine_role+"')"," and 销售员 in ('"+销售员+"')")}
${if(len(销售员)==0 && fine_username=='sa',""," and 销售员 in ('"+销售员+"')")}

假如销售员为空,name为sa,则第一条为假,第二条为真,第一条为假就会使用

" and 销售员 in ('"+销售员+"')")}

第二条为真会使用""

所以最后的sql语句为

where 1=1 +"and 销售员 in ('') "+""

因为没有销售员为空,所以查不出数据

最佳回答
0
qhlLv6中级互助
发布于2019-12-11 15:11(编辑于 2019-12-11 15:13)

应该是语句拼接错误,应该用and(),不能用&&:

方法一(写两条):
${if(and(len(销售员)==0,fine_username!="sa"),"and 地区 in ('"+fine_role+"')","and 销售员 in ('"+销售员+"')")}
${if(and(len(销售员)==0,fine_username=="sa"),"","and 销售员 in ('"+销售员+"')")}

方法二:
${if(and(len(销售员)==0,fine_username=="sa"),"",if(and(len(销售员)>0,fine_username=="sa"),"and 销售员 in ('"+销售员+"')",if(and(len(销售员)==0,fine_username!="sa"),"and 地区 in ('"+fine_role+"')","and 销售员 in ('"+销售员+"')")))}


最佳回答
0
sayLv6初级互助
发布于2019-12-11 15:13

能不能改个逻辑,先判断是不是管理员,如果是就不进行过滤,否则按销售员参数判断?

where 1=1 ${if(fine_username !="sa","",if(len(销售员)=0," AND 地区='"+fine_role+"'"," AND 销售员='"+销售员+"'"))}

最佳回答
0
axingLv6专家互助
发布于2019-12-11 15:14

感觉销售员和fine_username两个条件没有必要的关联

where 1=1
${if(fine_suername="sa",""," and 地区 in ('"+fine_role+"')")}
${if(len(销售员)=0,"","and 销售员 in ('"+销售员+"')")}


  • 7关注人数
  • 491浏览人数
  • 最后回答于:2019-12-11 15:28
    请选择关闭问题的原因
    确定 取消
    返回顶部