我想选择所有拥有学生类型的用户,并统计所有与他们相关的国家。这一顺序应以与它们有联系的国家的数目为基础。
用户表:

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/

10-10 23:54