2016-05-12 8 views
1

私は選手のバッジのランキングを作成していますが、私はdbクエリに固執しています。Laravel - 少数のテーブルからデータを取得する(参加と注文)

テーブル: ユーザー(ID)、クラブ(ID)、club_user(USER_ID、club_id)、バッジ(USER_ID)

私は指定されたクラブからのすべてのユーザーの一覧を取得したいと思います(例えば、クラブのために.id = 1)とバッジの量を比較します。結果は、バッジの数で並べる必要があります。

この種のdbクエリを作成するにはどうすればいいですか? Eloquentでも可能ですか?

db::tablejoinで作成する必要がありますか?

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 

クラブ1のユーザーのランキングをバッジ数順に取得したい場合は、

私が取得する必要があります。

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

Kate is not it this club. 
+0

いくつかのダミーデータと所望の出力とテーブル構造を明記してください。 –

+0

@BikashPはダミーデータを追加しました。 –

+0

私の答えは役に立ちました@Michal –

答えて

1

はあなたの出力を取得します。この

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 

を試してみてください。

0

最後に、私はこのDB ::テーブルのクエリでそれを作った:

$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(); 
関連する問題