#database #laravel-5 #eloquent #laravel-query-builder
Вопрос:
В настоящее время я работаю над таблицей user_score, в которой мне нужно отобразить все данные о результатах пользователей, такие как количество попыток, средний балл и т. Д. Мне нужно отобразить данные по идентификатору викторины, и у меня возникли проблемы с определением количества попыток. как вы можете видеть ниже, у меня есть два данных или две попытки, теперь я хочу сгруппировать их и считать 2 попытки. Есть ли способ сгруппировать их, так как я использовал DB:raw, и когда я использовал groupby, это не работает. Кто-нибудь может мне помочь, спасибо!
Примерное изображение ответа на запрос
Вот мой код:
$remarks = DB::table('user_scores')->where('quiz_id',$id)
->Join('quiz_information','quiz_information.id', '=', 'quiz_id')
->rightJoin('users','users.id', '=', 'user_id')
->select(DB::raw('COUNT(user_scores.user_id) as Attempts'),'quiz_information.quiz_title AS Quiz Title','total_points AS Points','number_of_correct_answers',
'users.name AS Name',DB::raw('if(remarks=1,"passed","failed") as STATUS'), DB::raw("AVG(number_of_correct_answers) AS Average"),
'user_scores.created_at AS Date and Time')
// ->select('quiz_information.quiz_title AS Quiz Title','total_points AS Points','number_of_correct_answers',
// 'users.name AS Name','remarks as STATUS', 'user_scores.created_at AS Date and Time')
->groupBy('quiz_title','total_points','number_of_correct_answers','name','remarks','user_scores.created_at')
->get()
->toArray();
return response(['message'=>"Remarks successfuly shown",
'error'=>false,
'error code'=>200,
'line'=>"line".__LINE__."".basename(__LINE__),
'quizRemarks'=>$remarks],200,[],JSON_NUMERIC_CHECK);
}
Комментарии:
1. Почему вы использовали несколько плиток dbraw
2. Тогда вы должны группироваться только по quiz_title :
->groupBy('quiz_title')