使用FineReport实现查询条件和数据列表的关系为多对多的筛选

FineRport是一个常用的商业数据报表设计器,下面我们来说一下当筛选条件的数据集和列表数据的数据集之间的关系为多对多的时候该如何筛选
先来个图例:
在这里插入图片描述
比如说上面有一个Product的筛选条件,里面的数据集和下面列表的数据关系为多对多。
这里我们涉及三张表
1、 coc_request(数据表)

// 列表中的数据
DROP TABLE IF EXISTS coc_request;
CREATE TABLE coc_request(
    `Id` VARCHAR(255)    COMMENT '' ,
    `CreateTime` DATETIME    COMMENT '' ,
    `Subject` VARCHAR(255)    COMMENT '' 
)  COMMENT = '数据表';

2、coc_product(查询参数表)

DROP TABLE IF EXISTS coc_product;
CREATE TABLE coc_product(
    `Id` VARCHAR(255)    COMMENT '' ,
    `ParentId` VARCHAR(255)    COMMENT '' ,
    `Name` VARCHAR(255)    COMMENT '' 
)  COMMENT = '参数树状表';

3、coc_request_product(关联关系表)

DROP TABLE IF EXISTS coc_request_product;
CREATE TABLE coc_request_product(
    `Id` VARCHAR(255) NOT NULL   COMMENT '' ,
    `RequestId` VARCHAR(255)    COMMENT 'RequestId' ,
    `ProductId` VARCHAR(255)    COMMENT 'productId' ,
    `Timestamp` VARCHAR(255)    COMMENT '更新时间' ,
    `Status` VARCHAR(255)    COMMENT '状态1正常,-1删除' ,
    PRIMARY KEY (Id)
)  COMMENT = 'request和product的关联关系';

如果是正常的前后端分离代码中,这种实现非常灵活,前端传入ProductId的数组,后端可以先查关联关系,通过关联关系再查询数据

select RequestId from coc_request_product where ProductId in('','')

select * from coc_request where Id in('','')

大概就是这么两个步骤。
但是在FineReport的中一般是一条sql语句解决,所以我们实现的思路是

select *
from coc_request
where Id in (select RequestId from coc_request_product where ProductId in (''))

对应FineReport的sql为

select * from coc_request where 1=1 
${if(len(ProductTree)=0,"","and Id in (select RequestId from coc_request_product where ProductId in ('"+SUBSTITUTE(ProductTree,",","','")+"'))")} 

其中ProductTree是参数控件的名称,换成自己对应的
在这里插入图片描述
之后即可实现多对多的查询

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暮春二十四

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值