Mybatis-plus的QueryWrapper拼接多个and 其中子条件中包含or

文章描述了如何使用QueryWrapper在数据库中查询特定用户账户的活动数据,包括作品数、延迟次数等,并对近45天的数据进行分组和排序的过程。
摘要由CSDN通过智能技术生成
 //根据id找到关联账号
        QueryWrapper<UserA> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("cyber_start_id", id);
        queryWrapper.eq("expire", 1);

        queryWrapper.select("user_id", "platform");
        List<UserA> list = userAccountInfoService.list(queryWrapper);
        if(list != null && list.size() > 0){

            QueryWrapper<UserA> statUserAccountQueryWrapper = new QueryWrapper<>();
            statUserAccountQueryWrapper.select("stat_time", "sum(works) as works", "sum(rtt_count) as rtt_count", "sum(comment_count) as comment_count",
                    "sum(like_count) as like_count", "sum(fans) as fans");
            //近45天的
            String stime = TimeUtil.getBeforeDay(45);
            String etime = TimeUtil.getBeforeDay(-1);
            statUserAccountQueryWrapper.between("stat_time", stime, etime);

            //子条件
            statUserAccountQueryWrapper.nested(i ->
                    i.and(j -> {
                        for (UserA userAccountInfo : list) {
                            String userId = userAccountInfo.getUserId();
                            String platform = userAccountInfo.getPlatform();

                            j.or(k -> k.eq("platform", platform)
                                    .eq("user_id", userId));
                        }
                    })
            );



            statUserAccountQueryWrapper.groupBy("stat_time");
            statUserAccountQueryWrapper.orderByAsc("stat_time");
            List<UserA> dataList = statUserAccountService.list(statUserAccountQueryWrapper);

最终的SQL

SELECT
	stat_time,
	sum( works ) AS works,
	sum( rtt_count ) AS rtt_count,
	sum( comment_count ) AS comment_count,
	sum( like_count ) AS like_count,
	sum( fans ) AS fans 
FROM
	stat_user_account 
WHERE
	(
		stat_time BETWEEN ? 
		AND ? 
		AND (((
					platform = ? 
					AND user_id = ?) 
				OR (
					platform = ? 
				AND user_id = ?)))) 
GROUP BY
	stat_time 
ORDER BY
	stat_time ASC

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值