Как добавить где на count () в объединенной таблице? - PullRequest
0 голосов
/ 03 мая 2020

Как добавить предложение where только на count()? Использование ->where('point',1) повлияет на конечный результат всей таблицы, а это не то, что я хочу. Я хочу рассчитать количество точек, где оно сгруппировано по child_id, а столбец точек равен 1.

 $chore_contents = DB::table('chores_content')   
        ->join('children', 'children.id', '=', 'chores_content.child_id')  
        ->select('chores_content.id as content_id','chores_content.*', 'children.*', DB::raw("COUNT(point) as points"))        
        ->where('chores_content.user_id', Auth::id())
        ->where('chores_content.chores_id', $id)  
        ->groupBy('chores_content.child_id')     
        ->get();
        return $chore_contents;

Ответы [ 2 ]

0 голосов
/ 03 мая 2020

Этот вопрос недостаточно ясен, поэтому на данном этапе это просто обоснованное предположение.

Сначала поясним, что когда вы делаете это: count (point), вы уже исключаете строки, в которых точка равна нулю. Вы не должны считать (точку), если вы хотите включить строки, где точка равна нулю.

Учитывая ваши комментарии, вы, кажется, противоречите своему утверждению о том, что вам нужны только строки, в которых точка = 1. Теперь кажется, что вам нужны строки, в которых точка = 1 или точка равна нулю.

Чтобы сделать это с помощью eloquent, вам нужно иметь скобки вокруг (точка = 1 или точка IS NULL), которую вы можете сделать, передав анонимная функция:

$chore_contents = DB::table('chores_content')   
    ->join('children', 'children.id', '=', 'chores_content.child_id')  
    ->select('chores_content.id as content_id','chores_content.*', 'children.*',  DB::raw("COUNT(*) as points"))        
    ->where('chores_content.user_id', Auth::id())
    ->where('chores_content.chores_id', $id) 
    ->where(function ($chore_contents) {
        $chore_contents->where('point',1)
            ->orWhereNull('point');
    }) 
    ->groupBy('chores_content.child_id') 
    ->havingRaw('COUNT(point) =1')    
    ->get();
return $chore_contents;
0 голосов
/ 03 мая 2020

Для того, чтобы реализовать это, используйте hasRaw:

$chore_contents = DB::table('chores_content')   
    ->join('children', 'children.id', '=', 'chores_content.child_id')  
    ->select('chores_content.id as content_id','chores_content.*', 'children.*',  DB::raw("COUNT(point) as points"))        
    ->where('chores_content.user_id', Auth::id())
    ->where('chores_content.chores_id', $id)  
    ->groupBy('chores_content.child_id') 
    ->havingRaw('COUNT(point) =1')    
    ->get();
    return $chore_contents;

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...