Laravel mysql选择连接表的计数

时间:2014-08-30 03:00:06

标签: mysql laravel

我有一个包含用户列表的表(users)。我有一个数据透视表(sign_in_out),其中包含字段user_idsigned_in。我想获得一个所有用户列表,其中包含各自sign_in_out行包含NULL值的计数。

这就是我现在所拥有的:

$publishers = Sentry::getUserProvider()
    ->createModel()
    ->select('users.id', 'users.first_name', 'users.last_name', 'sio.sign_in_count')
    ->join('users_groups', 'users.id', '=', 'users_groups.user_id')
    ->join(DB::raw('(
        SELECT user_id, COUNT(*) sign_in_count
        FROM sign_in_out
        WHERE signed_in IS NULL
        GROUP BY user_id) sio'), function($join)
    {
        $join->on('users.id', '=', 'sio.user_id');
    })
    ->where('users_groups.group_id', '=', 2)
    ->orderBy('users.last_name', 'ASC')
    ->orderBy('users.first_name', 'ASC')
    ->get();

这仅返回signed_inNULL的结果以及发生了多少次的count但我想要返回所有用户,无论他们是否有任何匹配的行是sign_in_out表。我知道WHERE signed_in IS NULL正在弄清楚这一点,所以如何将其与主查询区分开来?

1 个答案:

答案 0 :(得分:1)

想出来 - 在查询left join表时查询应该使用sio

$publishers = Sentry::getUserProvider()
    ->createModel()
    ->select('users.id', 'users.first_name', 'users.last_name', 'sio.sign_in_count')
    ->join('users_groups', 'users.id', '=', 'users_groups.user_id')
    ->leftJoin(DB::raw('(
        SELECT user_id, COUNT(*) sign_in_count
        FROM sign_in_out
        WHERE signed_in IS NULL
        GROUP BY user_id) sio'), function($join)
    {
        $join->on('users.id', '=', 'sio.user_id');
    })
    ->where('users_groups.group_id', '=', 2)
    ->orderBy('users.last_name', 'ASC')
    ->orderBy('users.first_name', 'ASC')
    ->get();
相关问题