where多条件使用FIND_IN_SET 查询数据错误记录

文章讨论了在Laravel中遇到的FIND_IN_SET多条件查询SQL语法错误,提出通过闭包形式调整逻辑以确保正确查询。
摘要由CSDN通过智能技术生成

 说明   数据库字段 category_id  的值为1,2,3,4,5,6    在代码中实现where   FIND_IN_SET 多条件查询时

当where 有另外的条件会出现查询数据错误的情况

        $where = [];
		$where['type'] = "0";
		$category_ids = 1,32,67,68,69,33,70,71,72;
		
		$category_ids = explode(',',$category_ids);

		for ($i = 0; $i < count($category_ids); $i++) {
			$whereOr[] =['exp', Db::raw("FIND_IN_SET($category_ids[$i],category_id)")];
		}
		$list = \app\common\model\GoodsModel::where($where)->whereOr($whereOr)->fetchSql()->select();
打印的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 可以减少此类情况的发生

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值