В основном у меня есть две таблицы. answers
и choices
. В моей таблице choices
я получил столбец choices.value
, который имеет значения 0-4. Мой текущий запрос, подобный этому
$answers = \DB::table('answers')
->join('choices','answers.choice_id','=','choices.choice_id')
->select('answers.user_id','choices.choice_id','choices.choice','choices.value')
->where('answers.user_id',\Auth::user()->id)
//->groupBy('answers.user_id')
->get();
Мой текущий ответ похож на это
"user_id": 2,
"choice_id": 2,
"choice": "I feel discourated about the future",
"value": 1
},
{
"user_id": 2,
"choice_id": 2,
"choice": "I don't enjoy things the way I used to",
"value": 1
},
{
"user_id": 2,
"choice_id": 2,
"choice": "I feel guilty a good part of time",
"value": 1
как мне добавить значения, чтобы мой результат был таким
"user_id":2,
"total_score":3
Я пытался сделать DB::raw(SUM(choices.values)as score)
, но я получаю большую сумму. Я предполагаю, что это добавление всех значений выбора из таблицы выбора, а не в ответах.
Мои ответы db, в которых я выбираю только ответы пользователя = 2. Я ограничиваюсь 5
+---------+-------------+-----------+
| user_id | question_id | choice_id |
+---------+-------------+-----------+
| 2 | 1 | 2 |
| 2 | 2 | 2 |
| 2 | 3 | 2 |
| 2 | 4 | 2 |
| 2 | 5 | 2 |
+---------+-------------+-----------+
Моя таблица выбора, я выбираю только вопросы 1 и 2 и их варианты.
+-----------+-------------+--------------------------------------------------------------+-------+
| choice_id | question_id | choice | value |
+-----------+-------------+--------------------------------------------------------------+-------+
| 1 | 1 | I do not feel sad | 0 |
| 2 | 1 | I feel sad | 1 |
| 3 | 1 | I am sad all the time and I can't snap out of it | 2 |
| 4 | 1 | I am so sad and unhappy that I can't stand it | 3 |
| 1 | 2 | I am not particularly discouraged about the future | 0 |
| 2 | 2 | I feel discourated about the future | 1 |
| 3 | 2 | I feel I have nothing to look forward to | 2 |
| 4 | 2 | I feel the future is hopeless and that things cannot improve | 3 |
+-----------+-------------+--------------------------------------------------------------+-------+
Также я хочу создать новую таблицу с именем scores
, и столбцы будут результатом того, что я хочу. Я хочу добавить choices.values
в ответе в каждый answers.user_id
, чтобы при просмотре таблицы результатов отображалась общая оценка по каждому пользователю или когда пользователь заканчивал отвечать на все 21
вопросы, потому что я получил только 21 элементы, которые будут автоматически добавлены в таблицу scores
. Могу ли я это сделать? Можно ли добавить value
в таблицу answers
, основанную на choice_id
? Это то, что я думаю, но я думаю, что это избыточно, поскольку choice_id
уже есть. Заранее спасибо.
PS: пробовал писать эти запросы, но всегда получал 441
, что составляет value
всех вариантов в choices
таблице
SELECT answers.user_id,choices.choice_id,choices.value,COALESCE(sum(choices.value),0) as score FROM
`answers` JOIN `choices` ON choices.choice_id = answers.choice_id where
answers.user_id = 2
SELECT answers.user_id,choices.choice_id,choices.value,SUM(choices.value),0 as score FROM `answers`
join choices on choices.choice_id = answers.choice_id
where answers.user_id = 2
SELECT answers.user_id,choices.choice_id, sum(choices.value) from answers
JOIN `choices` ON choices.choice_id = answers.choice_id
group by answers.user_id