Я не знаю, как сделать это с MySQL, я только знаю, как выполнять базовые запросы, я хочу показать список результатов на основе совпадений, результаты будут отображаться на основе того же значения ответов … ответы могут иметь значение от 1 до 10
+++++++++++++++TABLE++++++++++++
id | userName | answer1 | answer2 | answer3 | answer4….
10 Jhon 1 1 3 8
11 Anne 1 2 4 8
12 Mike 7 4 5 7
etc…
++++++++++++++++++++++++++++++++++++++++
Если я отправлю значения в запросе, я хочу, чтобы проверить ответы и показать результат отсортированы мои совпадения,
больше матчей в первую очередь … матчей в последнюю очередь нет
Так что, если я отправлю результаты:
answer1=1 answer2=1 answer3=7 answer4=2...
результат должен быть (вернуть идентификатор)
10 11 12
Ваш дизайн таблицы не очень хороший, вы должны разделить его на таблицу пользователей и вопросов.
Если вы не можете изменить дизайн таблицы, вы можете решить проблему с помощью этого запроса:
select
id,
username,
if(answer1 = :an1, 1, 0) + if(answer2 = :an2, 1, 0) + if(answer3 = :an3, 1, 0) + if(answer4 = :an4, 1, 0) as total
from
table
order by total desc
ОБНОВИТЬ:
Лучший дизайн для этой проблемы:
Проверьте SQLFiddle: http://sqlfiddle.com/#!9/6c145/2 с живой демонстрацией.
Создать таблицу пользователей
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL
);
Создать таблицу вопросов
CREATE TABLE questions (
id INT PRIMARY KEY,
correct_answer INT NOT NULL
);
Создать таблицу ответов пользователей
CREATE TABLE user_answers (
user_id INT,
question_id INT,
user_answer TINYINT,
PRIMARY KEY (user_id, question_id),
FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE NO ACTION ON UPDATE NO ACTION,
FOREIGN KEY (question_id) REFERENCES questions (id) ON DELETE NO ACTION ON UPDATE NO ACTION
);
Чем для извлечения данных можно воспользоваться запросом:
SELECT
tmp.id,
tmp.username,
sum(tmp.is_correct) as total
FROM (
SELECT
users.id,
users.username,
IF (questions.correct_answer = user_answers.user_answer, 1, 0) as is_correct
FROM
users
INNER JOIN user_answers on users.id = user_answers.user_id
INNER JOIN questions on user_answers.question_id = questions.id
) tmp
GROUP BY tmp.id, tmp.username
ORDER BY total desc;
Других решений пока нет …