打印的sql语句为
SELECT * FROM `hc_goods` WHERE `type` = 0 OR ( FIND_IN_SET(1,category_id) ) OR ( FIND_IN_SET(32,category_id) ) OR ( FIND_IN_SET(67,category_id) ) OR ( FIND_IN_SET(68,category_id) ) OR ( FIND_IN_SET(69,category_id) ) OR ( FIND_IN_SET(33,category_id) ) OR ( FIND_IN_SET(70,category_id) ) OR ( FIND_IN_SET(71,category_id) ) OR ( FIND_IN_SET(72,category_id) )
这样的格式错误 where tupe =0 的 OR 应该为AND 才对 这样才可以查询正确数据
解决方法 使用闭包形式的 where sql 语句查询
$list = \app\common\model\GoodsModel::where($where)->where(function($query) use ($whereOr){
$query->whereOr($whereOr);
})->fetchSql()->select();
打印的sql语句为
SELECT * FROM `hc_goods` WHERE `type` = 0 AND ( ( FIND_IN_SET(1,category_id) ) OR ( FIND_IN_SET(32,category_id) ) OR ( FIND_IN_SET(67,category_id) ) OR ( FIND_IN_SET(68,category_id) ) OR ( FIND_IN_SET(69,category_id) ) OR ( FIND_IN_SET(33,category_id) ) OR ( FIND_IN_SET(70,category_id) ) OR ( FIND_IN_SET(71,category_id) ) OR ( FIND_IN_SET(72,category_id) ) )
总结 ! ! ! ! 使用FIND_IN_SET where多条件查询 sql语句 会出现AND OR 的形式不是OR AND 同时使用 闭包的形式查询sql 可以减少此类情况的发生