语句解释

那位大佬能解释下这句添加参数语句是什么意思。谢谢

${if(len(区域) == 0,"","and 地区 in('" + 区域 + "')")}

FineReport 1716639952 发布于 2020-4-26 23:04
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共9回答
最佳回答
1
snrtuemcLv8专家互助
发布于2020-4-27 07:03(编辑于 2020-4-27 07:05)

 SQL 语句为:SELECT * FROM 订单 where 1=1${if(len(区域) == 0,"","and 地区 in ('" + 区域+ "')")}

注:where 1=1表示条件永真,防止没有之后的参数条件时,where 多出而导致出错;len(区域)==0 表示参数 区域为空;"and 地区='"+区域+"'" 中间的 区域表示取参数值,'+' 为字符串拼接符号。

${if(len(区域) == 0,"","and 地区 = '" + 区域+ "'")} 表示若参数 区域 为空就不进行过滤,若不为空则货主地区等于参数值。

此处参数名 区域与参数面板中添加的下拉复选框控件 区域控件名一致,即将参数控件与数据集参数绑定到一起,实现参数的过滤。


最佳回答
0
张洪威Lv6高级互助
发布于2020-4-26 23:11

下拉复选框参数为空选择全部-https://help.finereport.com/doc-view-2395.html

这个文档里面有详细解释。

最佳回答
0
用户knZit1531Lv7见习互助
发布于2020-4-26 23:42

len(区域)==0,表示参数区域为空,"and 地区 in('" + 区域 + "')"中的区域表示取参数值,‘+’为字符串拼接符号

最佳回答
0
willgood1986Lv2初级互助
发布于2020-4-27 17:00

${if(condition, result_if_true, result_if_false)}

这个本质是一个动态参数构造过程。

首先说参数,在FR里面,定义一个参数的语法是 ${p},这个是非字符串形式的,否则就需要 ‘${p}’,其中 p 就是参数名称。

下面再说动态参数。

所谓动态参数就是参数是可用可不用的,如果前端没有选择这个参数,那么就不用参数过滤,否则就进行参数过滤,这里的参数过滤使用的 动态SQL拼接的方式实现的。

下面看这个动态的过程是如何实现的。

if(len(p) = 0, " ", " and name like '%" + p + "%'")

这个就是一个if函数执行过程。

len(p) = 0 代表参数内容为空,那么就不过滤,即通过一个空的字符串, “ ”来实现。

否则 就拼接 " and name like '%" + p + "%'",这里默认是一个字符型参数,而且模糊匹配,算是相对复杂的了,其实质就是 and name like '%p%'.由于动态参数自带了 and,所以,一般都是这样写的

SELECT * FROM Table where 1=1 if(len(p) = 0, " ", " and name like '%" + p + "%'")

在前端把这个名为 P 的参数添加即可。

希望你能明白,这个只是一个语法,习惯就好了。


最佳回答
0
luojian0323Lv7资深互助
发布于2020-4-27 17:10

意思是对地区这个字段做查询参数,当区域参数有值时,按区域参数查询地区,当区域参数没有值时,不按地区查询.也就是显示全部.

最佳回答
0
15588200382Lv6见习互助
发布于2020-4-27 17:56

${} 这个是固定语法

${if(len(区域) == 0,"","and 地区 in('" + 区域 + "')")} 

意思是这个控件参数名为区域的长度为0时,就等于空,

不然就等于 and 地区 in('" + 区域 + "') 这个

里面的'""+区域+""' 这个是拼接字符串滴

最佳回答
0
maoningLv5初级互助
发布于2020-4-28 10:12(编辑于 2020-4-28 10:12)

判断控件名称为“区域”的值,看它是否有数据,有数据就加上“and 地区 in('区域控件的值')”这个来过滤数据库里面“地区”字段为区域控件的值

最佳回答
0
P.anyuLv4初级互助
发布于2020-4-28 16:13

${if(len(区域) == 0,"","and 地区 in('" + 区域 + "')")}


当区域参数空的时候,数据集后面不追加语句,如果有数据,追加参数传入值。

最佳回答
0
13207222709Lv6高级互助
发布于2020-4-28 16:33

if(a,b,c)

解读:如果a成立,则b,否则c

${if(len(区域) == 0,"","and 地区 in('" + 区域 + "')")}

解读:

如果参数(区域)的长度为0——没有参数,则“”(什么都没有),否则:and 地区 in (参数(区域)

SQL用法

select * from 销量 where 1=1 ${if(len(区域) == 0,"","and 地区 in('" + 区域 + "')")}

无参数时拼的SQL

select * from 销量 where 1=1

有参数时拼的SQL

select * from 销量 where 1=1 and 地区 in (区域)

  • 10关注人数
  • 895浏览人数
  • 最后回答于:2020-4-28 16:33
    请选择关闭问题的原因
    确定 取消
    返回顶部