我想选择所有拥有学生类型的用户,并统计所有与他们相关的国家。这一顺序应以与它们有联系的国家的数目为基础。
用户表:
id name
1 user1
2 user2
3 user3
4 user4
5 user5
国家表:
id country_name
1 America
2 Australia
3 Argentina
4 Afghanistan
5 India
pivot_countries_用户表:
id user_id country_id
1 1 1
2 1 2
3 2 1
4 3 1
5 4 2
6 5 2
7 4 3
8 1 4
用户类型表:
id type user_id
1 student 1
2 student 2
3 teacher 3
4 lawyer 4
5 teacher 5
以下是我尝试过的laravel查询:
DB::table('users')
->leftjoin('pivot_countries_user','pivot_countries_user.user_id','=','users.id')
->leftjoin('countries','countries.id','=','pivot_countries_user.id')
->leftjoin('user_type','user_type.user_id','=','users.id')
->select('users.name','users.type',
DB::raw('count(pivot_countries_user.country_id)')) // should be per user but I don't know how
预期产量:
name type total_countries
user1 student 3
user2 student 1
最佳答案
DB::table('users')
->leftJoin('pivot_countries_user','pivot_countries_user.user_id','=','users.id')
->leftJoin('countries','countries.id','=','pivot_countries_user.country_id')
->leftJoin('user_type', function ($join) {
$join->on('user_type.user_id', '=', 'users.id')
->where('user_type.type', '=', 'student');
})
->select('users.name','user_type.type',
DB::raw('count(countries.country_id) AS total_countries'))
->groupBy('users.id')
->get();
然后您将得到预期的结果:
名称类型国家总数
用户1学生3
用户2学生1
关于php - Laravel查询-按计数排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36542615/