larvel 暴力子查询

7 篇文章 0 订阅
public function getQuery($select = [])
{
    if (empty($select)) {
        //默认筛选字段
        $select = [
            'invite_activity_user_rank.id',
            'invite_activity_user_rank.vip_at',
            'invite_activity_user_rank.act_id',
            'invite_activity_user_rank.mobile',
            'invite_activity_user_rank.user_id',
            'invite_activity_user_rank.vip_number',
            'invite_activity_user_rank.is_virtual',
            'invite_activity_user_rank_award.id AS award_id',
            'invite_activity_user_rank_award.reward_name',
            'invite_activity_user_rank_award.reward_type'
        ];
    }
    $query = InviteActivityUserRankModel::select($select)
        ->leftJoin('invite_activity_user_rank_award', function($join) {
            //用户的奖励详情
            $join->on('invite_activity_user_rank_award.act_id', '=', 'invite_activity_user_rank.act_id')
                ->on('invite_activity_user_rank_award.user_id', '=', 'invite_activity_user_rank.user_id');
        })
        ->where('invite_activity_user_rank.act_id', $this->activityId)
        ->orderBy('invite_activity_user_rank.vip_number', 'desc') //邀请人数排序顺序
        ->orderBy('invite_activity_user_rank.vip_at', 'asc')    //最先邀请人的排前面
        ->orderBy('invite_activity_user_rank.id', 'asc');    //最先邀请注册的排前面

    //查询用户详细情况
    if ($this->isshowUserDetail) {
        $query = $query->leftJoin('users', 'users.id', '=', 'invite_activity_user_rank.user_id')
            ->leftJoin('user_groups', 'user_groups.id', '=', 'users.group_id')
            ->select(array_merge($select, [     //扩展查询字段
                'user_groups.group_name',
                'invite_activity_user_rank_award.province_id',
                'invite_activity_user_rank_award.city_id',
                'invite_activity_user_rank_award.district_id',
                'invite_activity_user_rank_award.address',
            ]));
    }

    //构造一个排名的sql
    $sql = "
        (
            select
                t.*, @user_rank := @user_rank + 1 AS user_rank
            from
                (SELECT @user_rank := 0) r,({$query->toSql()}) as t
        ) as b

    ";
    $query = DB::table(DB::raw($sql))
        ->select(DB::raw('b.*'))
        ->mergeBindings($query->getQuery());

    //有输入手机
    if ($this->isInput($this->mobile)) {

        $query->whereRaw("b.mobile = '{$this->mobile}'");
    }
    //不显示虚拟数据, 只显示真实用户
    if ($this->isInput($this->not_virtual) && $this->not_virtual == InviteActivityUserRankModel::IS_VIRTUAL ) {
        $isUser = InviteActivityUserRankModel::IS_USER;
        $query->whereRaw("b.is_virtual = '{$isUser}'");
    }
    return $query;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值