ВЫБЕРИТЕ правильный ODD, если ответ ложный - PullRequest
0 голосов
/ 23 января 2019

В моей базе данных есть 3 таблицы с именем: questions, answerquestion, odds

Первый (Вопросы) имеет список вопросов

+=========================+
|   ID   |    question    | 
+=========================+
|   1    |    Bla Bla     |
|   2    |    question    |
|   3    | Other Question |
+-------------------------+

Второй (AnswerQuestion) имеет ответ пользователей на конкретный вопрос

+==================================================+
|   ID   | idQuestion | idOdd | idUser | isCorrect |
+==================================================+
|   1    |    4       |     2 |     5  |     0     |
|   2    |    3       |     1 |     1  |     1     |
|   3    |    1       |     3 |     10 |     0     |
+--------------------------------------------------+

Третий (шансы) имеет шансы на вопрос с правильным

+============================================+
|   ID   |    odd   | idQuestion | isCorrect |
+============================================+
|   1    |    One   |          1 |     0     |
|   2    |    Two   |          1 |     1     |
|   3    |   Three  |          1 |     0     |
+--------------------------------------------+

Итак, чтобы получить ответы конкретного пользователя, я использую этот запрос:

SELECT * FROM answerquestion a, question q, odds o
WHERE a.IdUser = :id AND a.IdOdd = o.ID AND a.IdQuestion = q.ID

Это нормально работает, но я хочу получить правильное нечетное, если ответ пользователя ложный и для этого я использую оператор IF для SQL, запрос:

SET SQL_BIG_SELECTS=1;
SELECT DISTINCT IF(o.isCorrect = 0, o.Corr.TheCorr, o.odd), q.Question
FROM answerquestion a, odds o, question q,
  ( SELECT o.odd AS TheCorr FROM odds o, question q WHERE o.isCorrect = 1 AND o.IdQuestion = q.ID) AS Corr
WHERE a.IdUser = 5
AND q.ID = a.idQuestion
AND a.IdOdd = o.ID

Проблема в этом запросе - ложный ответ, он дает мне правильный ответ на все вопросы и дублирует вопрос

Пример:

Question ID 4 'Bla Bla' | Correct odd of Question ID 1
Question ID 4 'Bla Bla' | Correct odd of Question ID 2
Question ID 4 'Bla Bla' | Correct odd of Question ID 3
Question ID 4 'Bla Bla' | Correct odd of Question ID 4
Question ID 4 'Bla Bla' | Correct odd of Question ID 5

Я хочу, чтобы, если ответ на вопрос 4, мне нужно получить только правильное нечетное из этого

Question ID 4 'Bla Bla' | Correct odd of Question ID 4

Любая помощь?

1 Ответ

0 голосов
/ 23 января 2019

Использование правильного JOIN - это то, что нужно. Не уверен, какие столбцы следует выбрать, но это легко исправить.

SELECT q.id, q.question, o.odd as correct, o2.odd as user_odd
FROM question q
JOIN AnswerQuestion a ON a.idQuestion = q.id
JOIN Odds o ON o.questionID = q.id AND o.isCorrect = 1
JOIN Odds o2 ON o2.id = a.idOdd
WHERE a.idUser = 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...