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