Laravel - 从几个表中获取数据(连接和排序)
Laravel - Getting data from few tables (joining and ordering)
我正在创建玩家徽章排名,但遇到了数据库查询问题。
表格:
用户(id),俱乐部(id),club_user(user_id,club_id),徽章(user_id)
我想获取指定俱乐部(例如 club.id = 1)的所有用户的列表以及他们拥有的徽章数量。结果应按徽章数量排序。
如何创建那种数据库查询? Eloquent 可以吗?
应该用db::table
和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.
试试这个
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
你会得到你的输出。
最后我用这个 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();
我正在创建玩家徽章排名,但遇到了数据库查询问题。
表格: 用户(id),俱乐部(id),club_user(user_id,club_id),徽章(user_id)
我想获取指定俱乐部(例如 club.id = 1)的所有用户的列表以及他们拥有的徽章数量。结果应按徽章数量排序。
如何创建那种数据库查询? Eloquent 可以吗?
应该用db::table
和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.
试试这个
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
你会得到你的输出。
最后我用这个 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();