1

我正在创建玩家徽章的排名,但我坚持使用 db 查询。

表: 用户(ID),俱乐部(ID),俱乐部用户(用户ID,俱乐部ID),徽章(用户ID)

我想从指定俱乐部(例如 club.id = 1)获取所有用户的列表以及他们拥有的徽章数量。结果应按徽章数量排序。

如何创建那种数据库查询?Eloquent 可以吗?

应该用db::tableand制作join吗?

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.
4

2 回答 2

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 

你会得到你的输出。

于 2016-05-12T08:24:33.417 回答
0

最后我用这个 DB::table 查询做到了:

$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();
于 2016-05-12T09:05:26.687 回答