2016-05-12 2 views
1

Ich erstelle eine Rangliste von Spielern Abzeichen und ich bin mit db-Abfrage fest.Laravel - Daten von wenigen Tabellen erhalten (Beitritt und Bestellung)

Tabellen: Benutzer (id), Club (id), club_user (user_id, club_id), Abzeichen (user_id)

Ich mag würde Liste aller Benutzer von bestimmten Club erhalten (zum Beispiel Club .id = 1) mit der Anzahl der Abzeichen, die sie haben. Ergebnisse sollten nach Anzahl der Abzeichen sortiert werden.

Wie erstellt man diese Art von DB-Abfrage? Ist es möglich mit Eloquent?

Sollte es mit db::table und join gemacht werden?

Table user 

id|name 
1|John 
2|Robert 
3|Kate 


Table club 

id|name 
1|Sunshine Club 
2|Example Club 


Table club_user 

user_id|club_id 
1|1 
2|1 
3|2 


Table bagdes 

id|name|user_id|club_id 
1|Champion|1|1 
2|Some badge|1|1 
3|example|2|1 
4|Gold Badge|3|2 

also wenn ich Ranking der Benutzer von Club 1 erhalten möchte, sortiert nach Anzahl der Abzeichen.

sollte ich:

name|number of badges 
John|2 (badges) 
Robert|1 (badge) 

Kate is not it this club. 
+0

Bitte Tabellenstruktur mit einigen Blinddaten erwähnen und die gewünschten Ausgabe. –

+0

@BikashP Dummy-Daten hinzugefügt. –

+0

Meine Antwort war hilfreich @Michal –

Antwort

1

Versuchen Sie, diese

select user.name ,user.id as userid , (select count(bagdes.id) from 
bagdes  where user_id= userid) 
as total_badges from user inner join club_user on 
user.id = club_user.user_id where club_user.club_id = 1 

Sie Ihre Ausgabe erhalten wird. Schließlich

0

Ich habe es mit dieser DB :: Tabellenabfrage:

$users = DB::table('users') 
      ->select('users.name', DB::raw('count(*) as badges')) 
      ->join('badges', 'badges.user_id', '=', 'users.id') 
      ->where('badges.club_id', 1) 
      ->groupby('users.id') 
      ->orderBy('badges', 'DESC') 
      ->get();