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服務器上儘可能輕地執行此操作。任何人都可以提供建議嗎?我真的很感激它。謝謝。