Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 统计在调查中回答问题的人数_Laravel_Eloquent - Fatal编程技术网

Laravel 统计在调查中回答问题的人数

Laravel 统计在调查中回答问题的人数,laravel,eloquent,Laravel,Eloquent,我试图获得在调查中回答问题的总人数,因此调查id和调查id必须匹配一个值,然后我必须能够分离用户id,以便仅统计不同的用户,某些问题可以有来自同一个人的多个答案。我该怎么做 这是我想要获取此信息的表中的表架构 Schema::create('survey_answers', function (Blueprint $table) { $table->increments('id'); $table->integer('survey_id

我试图获得在调查中回答问题的总人数,因此调查id和调查id必须匹配一个值,然后我必须能够分离用户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我想要的是独立于回答者回答问题的不同用户的数量我认为你的答案的效果与post
groupBy(用户id)
@TsaiKoga
groupBy(用户id)一样
确实会产生不同的用户id,但是执行
计数将影响每个用户id,而不是全部计数。如果要使用
groupby
,则需要在嵌套查询中使用,外部查询执行
count
,以获得相同的效果是,正确。我的错误。我并非不知道。我认为你的答案的效果与post
groupBy(用户id)
@TsaiKoga
groupBy(用户id)
确实会产生不同的用户id,但进行
COUNT
会影响每个用户id,而不是计算所有用户id。如果要使用
groupby
,则需要在嵌套查询中使用,外部查询执行
count
,以获得相同的效果是,正确。我的错误。我并非没有意识到这一点。