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;
}