2016-08-04 31 views
1

Ich benutze Laravel 5.2 und versuche, eine Abfrage zu erstellen, um eine Tabelle der Top 5 Benutzer, die andere Benutzer in den letzten 30 Tagen verwiesen haben, zu erstellen.Laravel Abfrage in derselben Tabelle für zugeordnete Benutzer

Derzeit hat die Benutzertabelle eine Spalte 'referral', die die ID des Benutzers enthält, der sie weitergeleitet hat. Ich werde meine aktuelle Abfrage unten einfügen, um Ihnen eine Idee zu geben. Aber im Grunde würde ich gerne eine Liste von 5 Benutzern, die die meisten Empfehlungen haben, zurückgeben, die am meisten oder am wenigsten geordnet sind, damit ich meine Bestenliste erstellen kann. Hier

ist das, was ich bisher habe:

$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(); 

Nun ich weiß, ich werde falsch durch bereits ein, wo auf Benutzer mit role_id von 12 (die Mod für diejenigen fragen sich, der einzige diejenigen, die ich für diese Liste von Referrern interessiert!), ich beschränke die Ergebnisse auf diese Mods, wenn ich wirklich eine Liste von nur Mods zurückbringen muss, aber diese Liste auf den Benutzern basieren.

Es gibt 14.000 Benutzer dieses Systems, also muss ich dies so leicht wie möglich auf dem Db-Server tun. Kann mir jemand einen Rat geben? Ich würde es wirklich schätzen. Vielen Dank.

Antwort

0

Ok, wenn jemand das in Zukunft findet.

Ich war über die Abfrage denken. Ich musste nur alle Benutzer mit der Rolle "12" in der ersten packen, wo dann das whereDate entfernt wurde, da ich ALLE Benutzer mit der Rolle 12 brauchte, nicht nur die neuen Starter.

Dann in der DB :: Raw war ich in der Lage, die Benutzer mit einem Verweis passend zum aktuellen Benutzer referenzierten.

Dumm mich.