条件复杂组合查询 (whereRaw)

本文讨论了在ThinkPHP6框架中遇到的一个SQL查询问题,尝试使用_logic和_complex解决但未成功,最终通过whereRaw方法成功实现了查询。查询涉及到user_type和send_time条件,以及json字段的LIKE匹配。解决方案涉及时间戳处理和OR条件的组合使用。
摘要由CSDN通过智能技术生成

想满足的sql:

SELECT
	* 
FROM
	`p_notice` 
WHERE
	( ( send_time <  (当前时间) AND user_type = 20 AND `json` LIKE '%123456%' ) OR ( send_time < (当前时间)AND user_type = 10 ) ) 
ORDER BY
	`send_time` DESC

所在框架:thinkphp6
解决方式:_logic 和 _complex,结果 : 失败

 $time = time();
 $where_1['user_type'] = ['eq',10];
 $where_1['send_time'] =  ['lt', "$time"];
 $where_1['_logic'] =  'or';
 $map['_complex1']= $where_1;
 
 $where_2['user_type'] =  ['eq', 20];
 $where_2['send_time'] = ['lt', "$time"];
 $where_2['user_json'] = ['like', "%$no%"];
 $map['_complex2'] = $where_2;
 $list = Db::name('notice')->where($map)->select();

解决方式:whereRaw,结果: 成功

 $time = time();
 $whereOrRaw = "(send_time < {$time} AND user_type = 20 AND `json` LIKE '%{$no}%') or (send_time < {$time} AND user_type = 10)";
 $list = Db::name('notice')->whereOrRaw($whereOrRaw)->paginate(10)->toArray();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值