|
Подсчет правильных ответов
|
|||
---|---|---|---|
#18+
Есть таблицы: users_answers (userId, questionId, answer) и questions_answers (questionId, answer, isCorrect). Мне необходимо сделать запрос, который вернет количество правильных ответов (isCorrect == 1) для определенного userId, но при этом нужно учитывать то, что в вопросе может быть один или несколько правильных ответов. Соответственно, например, если в вопросе было три правильных ответа, а пользователь выбрал только два правильных, то счетчик не должен увеличиваться. Не пойму как составить такой вопрос. Тыкните, а лучше ударьте палкой, чтобы понять, куда двигаться и какие операторы использовать :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2019, 13:04 |
|
Подсчет правильных ответов
|
|||
---|---|---|---|
#18+
Для начала надо сформировать тестовые данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2019, 14:23 |
|
Подсчет правильных ответов
|
|||
---|---|---|---|
#18+
сто то вроде: условие sum(users_answer.answer)=sum(questions_answers.isCorrect) сгруппировав users_answers по userId, questionId и questions_answers по questionId с фильтром по isCorrec=true соединив по questionId, answer ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2019, 14:53 |
|
Подсчет правильных ответов
|
|||
---|---|---|---|
#18+
982183, Данные у меня в таком виде questions_answers questionID answer isCorrect 1 Это правильный ответ 1 1 Это неправильный ответ1 0 1 Это неправильный ответ2 0 2 Это неправильный ответ1 0 2 Это правильный ответ 1 2 Это правильный ответ1 1 2 Это неправильный ответ2 0 2 Это правильный ответ3 1 3 Это неправильный ответ 0 3 Это правильный ответ 1 3 Это неправильный ответ 0 users_answers userId questionId answer 1 1 Это правильный ответ 1 2 Это правильный ответ 1 2 Это неправильный ответ1 1 2 Это правильный ответ1 1 3 Это правильный ответ Соответственно в этом случае счетчик должен выдавать 2 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2019, 15:16 |
|
Подсчет правильных ответов
|
|||
---|---|---|---|
#18+
1. Узнай число правильных ответов в разрезу человек и вопрос из первой таблицы 2. Узнай число правильных ответов в разрезе вопросов из второй таблицы. 3. Сравни, выведи только с совпадением. Чего не умеешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2019, 15:41 |
|
Подсчет правильных ответов
|
|||
---|---|---|---|
#18+
Наоборот последовательность таблиц. Первая - users_answers Вторая - questions_answers Как в условии ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2019, 15:43 |
|
Подсчет правильных ответов
|
|||
---|---|---|---|
#18+
Столько много букв. даже не знаю, это говорит о детальном владении инструментом, или просто скопировал что было …. Вопрос в чем? Алгоритм понятен? Пути решения известны? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 02:33 |
|
Подсчет правильных ответов
|
|||
---|---|---|---|
#18+
1. Узнай число правильных ответов в разрезе человек+вопрос из таблицы users_answers | userId | questionId | count(users_answers.answer) | |--------|------------|-----------------------------| | 1 | 1 | 1 | | 1 | 2 | 1 | select users_answers.userId, users_answers.questionId, count(users_answers.answer) from users_answers, questions_answers where users_answers.questionId = questions_answers.questionID and users_answers.answer = questions_answers.answer and questions_answers.isCorrect=1 group by userId, questionId 2. Узнай число правильных ответов в разрезе вопросов из таблицы questions_answers. | questionId | count(questionId) | |------------|-------------------| | 1 | 1 | | 2 | 3 | | 3 | 1 | select questionId, count(questionId) from questions_answers where isCorrect=1 group by questionId 3. Сравни, выведи только с совпадением. | userId | questionId | count(users_answers.answer) | |--------|------------|-----------------------------| | 1 | 1 | 1 | 4. Посчитай количество строк. 1 (2 не получается по твоим данным) 5. составь запрос с конца до начала алгоритма, используя вложенные запросы. Несомненно, есть способ проще и быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 03:04 |
|
Подсчет правильных ответов
|
|||
---|---|---|---|
#18+
поле answer из user_answers можно удалить ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 13:05 |
|
Подсчет правильных ответов
|
|||
---|---|---|---|
#18+
А если у разных вопросов будет одинаковый ответ? 2+2=4 2*2=4 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 13:15 |
|
Подсчет правильных ответов
|
|||
---|---|---|---|
#18+
macheteroполе answer из user_answers можно удалить У бэкенд отдает вопросы массивом объектов и на стороне клиента формируется страница: если правильных ответов несколько - чекбоксы, один правильный ответ - радио, а если вариантов ответов = 1 и правильный ответ, соответственно, = 1, то генерируются импуты. Скорее всего, это неправильно сделано, но я пока что решил сделать так. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 13:51 |
|
Подсчет правильных ответов
|
|||
---|---|---|---|
#18+
982183Столько много букв. даже не знаю, это говорит о детальном владении инструментом, или просто скопировал что было …. Вопрос в чем? Алгоритм понятен? Пути решения известны? Вопрос уже я задал :) Алгоритм вроде понятен, но до этого в основном только доставал данные и такие более сложные запросы не делал, поэтому не до конца все понимаю это ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 13:52 |
|
Подсчет правильных ответов
|
|||
---|---|---|---|
#18+
TL;DR Код: sql 1.
Если есть хотя бы один неверный - не выберется. Если нет ни одного ответа - не выберется, ибо нечего, хоть сумма и нулевая. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2019, 20:45 |
|
|
start [/forum/topic.php?fid=47&msg=39829840&tid=1829076]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
97ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 201ms |
0 / 0 |