powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подсчет правильных ответов
16 сообщений из 16, страница 1 из 1
Подсчет правильных ответов
    #39829572
andrey216
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблицы: users_answers (userId, questionId, answer) и questions_answers (questionId, answer, isCorrect).

Мне необходимо сделать запрос, который вернет количество правильных ответов (isCorrect == 1) для определенного userId, но при этом нужно учитывать то, что в вопросе может быть один или несколько правильных ответов. Соответственно, например, если в вопросе было три правильных ответа, а пользователь выбрал только два правильных, то счетчик не должен увеличиваться.

Не пойму как составить такой вопрос. Тыкните, а лучше ударьте палкой, чтобы понять, куда двигаться и какие операторы использовать :)
...
Рейтинг: 0 / 0
Подсчет правильных ответов
    #39829586
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала надо сформировать тестовые данные.
...
Рейтинг: 0 / 0
Подсчет правильных ответов
    #39829593
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сто то вроде:
условие sum(users_answer.answer)=sum(questions_answers.isCorrect)
сгруппировав users_answers по userId, questionId
и questions_answers по questionId с фильтром по isCorrec=true
соединив по questionId, answer
...
Рейтинг: 0 / 0
Подсчет правильных ответов
    #39829594
andrey216
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
...
Рейтинг: 0 / 0
Подсчет правильных ответов
    #39829600
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Узнай число правильных ответов в разрезу человек и вопрос из первой таблицы
2. Узнай число правильных ответов в разрезе вопросов из второй таблицы.
3. Сравни, выведи только с совпадением.

Чего не умеешь?
...
Рейтинг: 0 / 0
Подсчет правильных ответов
    #39829601
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наоборот последовательность таблиц.
Первая - users_answers
Вторая - questions_answers
Как в условии
...
Рейтинг: 0 / 0
Подсчет правильных ответов
    #39829602
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey216Данные у меня в таком виде

Вот так это делают:
http://sqlfiddle.com/#!9/0f9842
...
Рейтинг: 0 / 0
Подсчет правильных ответов
    #39829614
andrey216
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Подсчет правильных ответов
    #39829676
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Столько много букв.
даже не знаю, это говорит о детальном владении инструментом, или просто скопировал что было ….
Вопрос в чем?
Алгоритм понятен?
Пути решения известны?
...
Рейтинг: 0 / 0
Подсчет правильных ответов
    #39829678
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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. составь запрос с конца до начала алгоритма, используя вложенные запросы.

Несомненно, есть способ проще и быстрее.
...
Рейтинг: 0 / 0
Подсчет правильных ответов
    #39829794
machetero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
поле answer из user_answers можно удалить
...
Рейтинг: 0 / 0
Подсчет правильных ответов
    #39829800
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если у разных вопросов будет одинаковый ответ?
2+2=4
2*2=4
...
Рейтинг: 0 / 0
Подсчет правильных ответов
    #39829840
andrey216
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
macheteroполе answer из user_answers можно удалить

У бэкенд отдает вопросы массивом объектов и на стороне клиента формируется страница: если правильных ответов несколько - чекбоксы, один правильный ответ - радио, а если вариантов ответов = 1 и правильный ответ, соответственно, = 1, то генерируются импуты.

Скорее всего, это неправильно сделано, но я пока что решил сделать так.
...
Рейтинг: 0 / 0
Подсчет правильных ответов
    #39829844
andrey216
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183Столько много букв.
даже не знаю, это говорит о детальном владении инструментом, или просто скопировал что было ….
Вопрос в чем?
Алгоритм понятен?
Пути решения известны?

Вопрос уже я задал :)

Алгоритм вроде понятен, но до этого в основном только доставал данные и такие более сложные запросы не делал, поэтому не до конца все понимаю это
...
Рейтинг: 0 / 0
Подсчет правильных ответов
    #39830072
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TL;DR

Код: sql
1.
WHERE SUM(ответ IN (список неверных ответов)) = 0



Если есть хотя бы один неверный - не выберется.
Если нет ни одного ответа - не выберется, ибо нечего, хоть сумма и нулевая.
...
Рейтинг: 0 / 0
Подсчет правильных ответов
    #39830548
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Останется вариант, когда будут выбраны не все правильные ответы, а неправильные не выбраны.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подсчет правильных ответов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]