想满足的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();
本文讨论了在ThinkPHP6框架中遇到的一个SQL查询问题,尝试使用_logic和_complex解决但未成功,最终通过whereRaw方法成功实现了查询。查询涉及到user_type和send_time条件,以及json字段的LIKE匹配。解决方案涉及时间戳处理和OR条件的组合使用。
4941

被折叠的 条评论
为什么被折叠?



