MySql组与where条件不起作用

时间:2019-10-03 08:28:23

标签: mysql laravel left-join

我有2个表,分别是问题。我需要这样的结果,即它包含组名和相应的未删除的问题计数。 这两个表的结构和数据如下。

groups-table

enter image description here

我的预期结果如下

enter image description here

我尝试了以下代码,但是它给出了包括已删除问题的整个行。

$groupname = DB::table('groups as d')
        ->select([
            'd.id','d.group_name',DB::raw("count(dtls.survey_group_id) as count")
        ])
        ->leftJoin('questions as dtls','d.id', '=', 'dtls.survey_group_id')
        ->whereNotExists( function ($query) {
            $query->select(DB::raw(1))
            ->from('questions')
            ->where('id', 'd.id')
            ->where('dtls.is_deleted', 1);
        })
        ->groupBy('d.id','d.group_name')
        ->get()
        ->toArray();

1 个答案:

答案 0 :(得分:0)

这里的问题是id用文字字符串d.id来对$groupname = DB::table('groups as d') ->select([ 'd.id','d.group_name',DB::raw("count(dtls.survey_group_id) as count") ]) ->leftJoin('questions as dtls','d.id', '=', 'dtls.survey_group_id') ->whereNotExists( function ($query) { $query->select(DB::raw(1)) ->from('questions as innerDtls') ->whereRaw('innerDtls.id = d.id') ->where('dtls.is_deleted', 1); }) ->groupBy('d.id','d.group_name') ->get() ->toArray(); 进行算术运算,这显然不是您想要的。此外,内部查询表应使用别名以避免歧义。您可以尝试将其更改为:

$groupname = DB::table('groups as d')
        ->select([
            'd.id','d.group_name',DB::raw("count(dtls.survey_group_id) as count")
        ])
        ->leftJoin('questions as dtls','d.id', '=', 'dtls.survey_group_id')
        ->where('dtls.is_deleted', 0)
        ->groupBy('d.id','d.group_name')
        ->get()
        ->toArray();

或者,您当前的查询可以简化为:

{{1}}