Laravel 统计在调查中回答问题的人数
我试图获得在调查中回答问题的总人数,因此调查id和调查id必须匹配一个值,然后我必须能够分离用户id,以便仅统计不同的用户,某些问题可以有来自同一个人的多个答案。我该怎么做 这是我想要获取此信息的表中的表架构Laravel 统计在调查中回答问题的人数,laravel,eloquent,Laravel,Eloquent,我试图获得在调查中回答问题的总人数,因此调查id和调查id必须匹配一个值,然后我必须能够分离用户id,以便仅统计不同的用户,某些问题可以有来自同一个人的多个答案。我该怎么做 这是我想要获取此信息的表中的表架构 Schema::create('survey_answers', function (Blueprint $table) { $table->increments('id'); $table->integer('survey_id
Schema::create('survey_answers', function (Blueprint $table) {
$table->increments('id');
$table->integer('survey_id')->unsigned();
$table->integer('survey_question_id')->unsigned();
$table->integer('user_id')->unsigned();
$table->text('answer');
$table->timestamps();
$table->foreign('survey_id')->references('id')->on('surveys');
$table->foreign('survey_question_id')->references('id')->on('survey_questions');
$table->foreign('user_id')->references('id')->on('users');
});
我在想这样的事情,这个返回1,而它应该返回7。我不知道为什么或者如何修复它。如果我删除了groupBy
和count
,那么我会得到一个7,但这不会对所有问题都起作用,因为有些问题是多项选择题,可以有15个答案,例如,只有5个人回答。最后一个想法是显示一个报告,报告中有选择每个答案的百分比或人数,我需要总数,在我的代码中,我已经有了每个选项的答案数量
$total = SurveyAnswer::where('survey_id', $survey->id)->where('survey_question_id', $question->id)
->groupBy('user_id')->count();
如果需要回答给定问题的不同用户数,可以尝试:
$total = SurveyAnswer::where('survey_id', $survey->id)
->where('survey_question_id', $question->id)
->selectRaw('COUNT(DISTINCT user_id) as count')
->value('count');
这应该返回回答该问题的不同用户的数量,无论回答了多少次,如果您需要回答给定问题的不同用户的数量,您可以尝试:
$total = SurveyAnswer::where('survey_id', $survey->id)
->where('survey_question_id', $question->id)
->selectRaw('COUNT(DISTINCT user_id) as count')
->value('count');
这应该返回有多少不同的用户回答了这个问题,而不管回答了多少次如果按用户id分组,则每个给出该答案的用户将得到一行
count()
将计算每个用户给出该答案的次数,即1。如果你不使用groupBy
你可能会得到你想要的东西,也就是给出特定信息的用户数量answer@apokryfos我想要的是独立于回答者回答问题的不同用户的数量如果按用户id分组,则每个给出答案的用户将得到一行count()
将计算每个用户给出该答案的次数,即1。如果你不使用groupBy
你可能会得到你想要的东西,也就是给出特定信息的用户数量answer@apokryfos我想要的是独立于回答者回答问题的不同用户的数量我认为你的答案的效果与postgroupBy(用户id)
@TsaiKogagroupBy(用户id)一样
确实会产生不同的用户id,但是执行计数将影响每个用户id,而不是全部计数。如果要使用groupby
,则需要在嵌套查询中使用,外部查询执行count
,以获得相同的效果是,正确。我的错误。我并非不知道。我认为你的答案的效果与postgroupBy(用户id)
@TsaiKogagroupBy(用户id)
确实会产生不同的用户id,但进行COUNT
会影响每个用户id,而不是计算所有用户id。如果要使用groupby
,则需要在嵌套查询中使用,外部查询执行count
,以获得相同的效果是,正确。我的错误。我并非没有意识到这一点。