Yii使用 case when 来模糊排序查询

$search_arr=['沙发','床','现代轻奢','新中式'];//越排在前面得关键词,优先模糊排序
 $where=[];
 $order_by="";
 $query = Goods::find()->alias('g')->where([

            'g.status' => 1,

            'g.is_delete' => 0,

            'g.type' => get_plugin_type(),

            'g.is_clear_sale'=>$is_clear_sale,





        ])->leftJoin(['m' => Mch::tableName()], 'm.id=g.mch_id')

            ->andWhere([

                'or',

                ['g.mch_id' => 0],

                ['m.is_delete' => 0]

            ]);
foreach ($search_arr as $k2=>$v2){
                
                 $kk = $k2+1;
                 if($k2==0){
                    $where[$k2]="or";
                    $where[$kk]=['like','g.name',$v2];
                    $order_by='case when `g`.`name` like \'%'.$v2.'%\' then '.$kk;
                 }
                 else{
                    $where[$kk]=['like','g.name',$v2];
                    $order_by.=' when `g`.`name` like \'%'.$v2.'%\' then '.$kk;
                 }

                
               }


 $order_by.=' end';
 $query->orderBy([$order_by => SORT_ASC]);
 $query->andwhere($where);
 $count = $query->count();
 $pagination = new Pagination(['totalCount' => $count, 'pageSize' => $this->limit, 'page' => $this->page - 1]);

 $list = $query->select('g.id,g.name,g.price,g.petao_introdu,g.original_price,g.cover_pic,gn.num,g.virtual_sales,g.unit,g.is_negotiable')

            ->limit($pagination->limit)

            ->offset($pagination->offset)

            ->asArray()->groupBy('g.id')->all();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值