Próbuję uzyskać całkowitą liczbę osób, które odpowiedziały na pytanie w ankiecie, więc ankieta_id i ankieta_kwestionariusz muszą pasować do wartości, a następnie muszę być w stanie oddzielić identyfikator_użytkownika, aby liczył tylko te, które są różne , niektóre pytania mogą mieć wiele odpowiedzi od tej samej osoby. W jaki sposób mogę to zrobić?

Jest to schemat tabeli z tabeli, w której chcę uzyskać tę informację

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');
        });

Myślałem o czymś takim, to zwraca 1, a powinno zwracać 7. Nie jestem pewien, dlaczego i jak to naprawić. Jeśli usunę groupBy i count, otrzymam 7, ale to nie zadziała, aby odpowiedzieć na wszystkie pytania, ponieważ niektóre pytania są wielokrotnego wyboru i mogą mieć 15 odpowiedzi udzielonych przez tylko 5 osób por przykład. Ostatnim pomysłem jest pokazanie raportu z procentem lub osobami, które wybrały każdą odpowiedź i do tego potrzebuję sumy, w moim kodzie mam już liczbę odpowiedzi dla każdej opcji.

$total = SurveyAnswer::where('survey_id', $survey->id)->where('survey_question_id', $question->id)
                    ->groupBy('user_id')->count();
0
Nancy 8 styczeń 2020, 18:23

1 odpowiedź

Najlepsza odpowiedź

Jeśli chcesz poznać liczbę odrębnych użytkowników, którzy odpowiedzieli na dane pytanie, możesz spróbować:

$total = SurveyAnswer::where('survey_id', $survey->id)
              ->where('survey_question_id', $question->id)
              ->selectRaw('COUNT(DISTINCT user_id) as count')
              ->value('count');

Powinno to zwrócić, ilu odrębnych użytkowników odpowiedziało na to pytanie, niezależnie od tego, ile razy

2
apokryfos 8 styczeń 2020, 15:33