2016-08-04 2 views
1

Laravel 5.2를 사용하여 지난 30 일 동안 다른 사용자를 추천 한 상위 5 명의 사용자 테이블을 만드는 쿼리를 작성하려고합니다.관련 사용자의 동일한 테이블에 대한 Laravel 쿼리

현재 사용자 테이블에는 참조 된 사용자의 ID가 포함 된 'referral'열이 있습니다. 나는 당신에게 아이디어를주기 위해 아래에 나의 현재의 질문을 포함시킬 것이다. 하지만 기본적으로 가장 많이 추천 한 추천 사용자가 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을 가진 사용자 (에 어디함으로써 잘못된거야 알고 여기

는 내가 지금까지있어 무엇인가 이 목록의 리퍼러 목록에 관심이있는 사용자)! 나는 mods의 목록을 가져와야 할 때 결과를이 mods로 제한합니다.

이 시스템에는 14,000 명이 넘는 사용자가 있으므로 가능한 한 db 서버에서이 작업을 수행해야합니다. 누구든지 조언을 해줄 수 있습니까? 나는 정말로 감사 할 것입니다. 감사.

답변

0

좋습니다. 그럼 누구든지 나중에 이것을 발견 할 수 있습니다.

나는 쿼리를 생각하고있었습니다. 처음에는 역할 '12'를 가진 모든 사용자를 데리고 whereDate를 제거해야 할 필요가 있었기 때문에 새로운 사용자가 아닌 모든 사용자가 역할 12를 필요로했습니다.

그런 다음 DB :: raw에서 참조 된 현재 사용자와 일치하는 참조를 가진 사용자를 선택할 수있었습니다.

어리석은 나를.

관련 문제