2016-08-04 26 views
1

我正在使用Laravel 5.2並嘗試構建查詢以創建過去30天內引用其他用戶的前5位用戶的表。Laravel查詢關聯用戶的同一張表

當前用戶表有一個'referral'列,其中包含引用它們的用戶的ID。我將在下面包含我目前的查詢,以給你一個想法。但基本上,我想返回一個列表,其中5個用戶的推薦人數最多,按照最少排序,所以我可以創建我的排行榜表。

這裏是我到目前爲止有:

$top5_referrers = User::join('users_roles_link', 'users_roles_link.user_id', '=', 'user.id') 
           ->where('users_roles_link.role_id',12) 
           ->whereDate('user.created_at', '>=', Carbon::today()->subDay(30)->toDateString()) 
           ->select(
            DB::raw(' 
             user.id, user.username 
             (SELECT COUNT(u.id) FROM user u WHERE u.referral = user.id AND u.referral IS NOT NULL AND u.created_at >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)) AS total_signups 
            ')) 
           ->groupBy('user.id') 
           ->orderBy('total_signups', 'desc') 
           ->take(5) 
           ->get(); 

現在我知道我被已經對12的ROLE_ID用戶(這是國防部對那些想知道,唯一的一個地方去錯我對這個引用列表感興趣!),我將結果限制在這些mod中,當時我真的需要帶回一個只有mod的列表,但是將這個列表基於用戶列表。

該系統有14,000多個用戶,因此我需要儘可能在db服務器上儘可能輕地執行此操作。任何人都可以提供建議嗎?我真的很感激它。謝謝。

回答

0

好的,以免有人在將來發現這一點。

我一直在想這個問題。我只需要抓住角色爲'12'的所有用戶,然後根據需要刪除whereDate。角色12的所有用戶,而不僅僅是新的起始者。

然後在DB :: raw中,我可以選擇與引用當前用戶匹配的引用的用戶。

傻我。