MySQL запрос (объединение таблиц)

0

QuestionsTable

id * (int) | question_text (строка) | question_type (int)

AlternativesTable

id * (int) | question_id (int) | altern_text (строка) | is_correct (bool)

AnswersTable

id * (int) | question_id (int) | alternative_id (int) | answer_text (строка)

"*" = первичный ключ

Каждый вопрос может быть либо типа свободного текста, либо множественного селектора. Вопрос с несколькими селекторами имеет одну или несколько альтернатив, и только один может быть правильным.

Ответ задается с помощью question_id и altern_id (множественный селектор) или answer_text (бесплатный текст). Это is_correct bool, поэтому я могу отметить, какой ответ правильный.

Как создать SQL-запрос, который даст мне все альтернативы, перечисленные для каждого вопроса, с подсчетом по каждой альтернативе, которая показывает, сколько ее выбрало? Скажем, я могу сохранить его в массиве и перебрать его с помощью цикла foreach и показать его в качестве примера ниже.

В качестве примера каждый вопрос представлен им question_text, и каждый альтернативный вариант этого вопроса представлен Alt1 (альтернативный_текст), Alt2 и т.д. Число после альтернатив - это количество полученных им выборов ( ответы).

MultiQuestion1

Alt1 | 3

Alt2 | 2

Alt3 | 0

MultiQuestion2

Alt1 | 2

Alt2 | 3

FreeText1

Ответ1

Ответ2

....

Я могу сделать запрос, который дает мне все вопросы и все альтернативы, принадлежащие ему, но я терплю неудачу, когда пытаюсь получить счет на все ответы для каждого альтернативного вопроса.

Итак, теперь я могу использовать некоторую помощь SQL-ninja =)

Заранее спасибо Daniel

  • 0
    Когда вы получите удовлетворительный ответ, считается хорошей формой щелкнуть контур галочки рядом с ним. (Если вы этого не сделаете, люди перестанут отвечать на ваши вопросы.) Stackoverflow.com/faq#howtoask
Теги:

1 ответ

0
Лучший ответ

Сверху моей головы это может работать:

SELECT alternatives.id, COUNT(DISTINCT(answers.id))
FROM alternatives
LEFT JOIN answers ON alternatives.id = answers.altid
GROUP BY alternatives.id;

Это должно дать вам общее количество раз, когда каждая альтернатива встречается в таблице answers.

  • 0
    Сладкий =), кажется, отлично работает! Спасибо
  • 0
    На самом деле, DISTINCT не нужен. Вы можете просто использовать COUNT(answers.id) в SELECT . Не уверен, что я думал там ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню