2016-06-02 3 views
0

Я не знаю, как это сделать с помощью mysql, я знаю только, как выполнять базовые запросы, я хочу показать список результатов на основе совпадений, Результаты будут показаны на основе того же значение ответов ... ответы могут иметь значение от 1-10Запрос Mysql на основе совпадений столбцов

+++++++++++++++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 
+0

Ваш дизайн стола ужасно. Вам нужно изменить его. Вы хотите помочь с этим? –

+0

Любая идея, как улучшить его? – user774375

+1

Вам нужен стол с пользователями. Затем стол с вопросами. И, наконец, таблица ответов, которая содержит user_id, question_id и answer_value. –

ответ

1

Ваш дизайн таблицы не в порядке, вы должны разделить его на пользователей и вопросы таблицы.

Если вы не можете изменить дизайн таблицы вы можете решить вам проблему, используя этот запрос:

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 

UPDATE: Лучше дизайн для этой проблемы:

Проверить на SQLFiddle: http://sqlfiddle.com/#!9/6c145/2 с живой демо.

  1. Создание пользователей Таблица

    CREATE TABLE users (
        id INT AUTO_INCREMENT PRIMARY KEY, 
        username VARCHAR(50) NOT NULL 
    ); 
    
  2. Создать таблицу Вопросы

    CREATE TABLE questions (
        id INT PRIMARY KEY, 
        correct_answer INT NOT NULL 
    ); 
    
  3. Создать пользователя Ответы Таблица

    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; 
+0

Хорошо, возможно, лучше иметь таблицу пользователя и таблицу ответов с включенным идентификатором пользователя ?. Было бы лучше? Как получить результаты с этой структурой? Быстрее имеет 2 стола? – user774375

+0

Обновлен с лучшим дизайном для вашей проблемы. –