#php #mysql #database #if-statement
#php #mysql #База данных #if-оператор
Вопрос:
Пожалуйста, внимательно прочитайте это, чтобы вы поняли вопрос. Этот вопрос для задания в университете.
Есть две таблицы, одна из которых является таблицей ответов, а другая — таблицей ответов студентов. Есть 6 полей, которые меня интересуют, 4 в таблице ответов и 2 из таблицы StudentAnswer. Ниже приведены таблицы, их поля и данные.
Комментарии:
1. Данные вашего примера выглядят немного запутанными. Должны ли все они быть ответами на вопрос 1 в
Answer
таблице, которую вы показываете?StudentAnswer
есть только ответы на вопрос 1, предположительно от разных студентов.2. Строка 1 показывает, что студент u0867587 поставил за свой ответ на вопрос 1. Правильный ответ — лидс, и он поставил для своего ответа лидс. Строка 2 показывает, что студент u1231231 ответил на тот же вопрос, очевидно, что правильный ответ по-прежнему Лидс, но он выбрал Бирмингем.
Ответ №1:
Я считаю, что левое соединение — это то, что вы ищете.
SELECT * FROM `StudentAnswer` as sa
LEFT JOIN (SELECT * FROM `Question` WHERE correct = 1) as q
ON `sa`.Questionid = q.id
Ответ №2:
Вам нужно посмотреть на подзапросы в mysql, ваш конечный ответ, вероятно, будет выглядеть примерно так…
SELECT * FROM Question q
INNER JOIN (SELECT sa.QuestionId, sa.StudentAnswer, at.AnswerContent FROM StudentAnswer sa LEFT JOIN Answer at ON (sa.StudentAnswer = at.AnswerId AND sa.QuestionId = at.QuestionId) sq ON q.QuestionId = sq.QuestionId
JOIN Answer a ON sq.QuestionId = a.QuestionId
WHERE
(CorrectAnswer = '1')
ORDER BY $orderfield ASC
Но без полной схемы я не могу помочь, я бы также сказал, будьте осторожны, все мои преподаватели в университете (Хаддерсфилд) были печально известны тем, что искали в таких местах фрагменты своих заданий, поэтому я надеюсь, что это помогло, не доставляя вам неприятностей
Комментарии:
1. Я тоже в университете Хаддерсфилда. Но сейчас я получаю степень магистра по научной степени. Мой руководитель — Джоан Лу, не знаю, знаете ли вы ее. Мой второй руководитель — Пол Джадж. Что ты делаешь?
2. Мне любопытно, почему вы выбрали
LEFT JOIN
междуStudentAnswer
иAnswer
. Возможно ли, что студент ответил чем-то, что не было одним из вариантов? Возможно, внешнее соединение должно быть междуQuestion
иStudentAnswer
, для случая, когда студент не отвечает на вопрос.3. Нет, учащийся может выбрать только те ответы, которые соответствуют номеру вопроса, например, если questionid 1 имеет 4 ответа, учащийся может выбрать только эти 4 ответа.
Ответ №3:
Вы можете присоединиться к Answer
более чем один раз в своем запросе, просто убедитесь, что вы присвоили ему другой псевдоним. Комбинация предложения WHERE и условия соединения, которые у вас есть сейчас, дает вам правильный ответ на вопрос; подумайте, как еще вы можете связать StudentAnswer
и Answer
.
Комментарии:
1. Проблема не в запросе, запрос работает нормально. Проблема в том, как мне вывести это как ответ word, используя поле AnswerContent, а не как идентификационный номер из StudentAnswer. Как мне сделать каждый идентификатор StudentAnswer равным содержимому его ответа и отобразить строку $[‘…’]
2. Запрос выполняется, но он не дает нужных вам данных. Чтобы получить два значения для
AnswerContent
в одной строке, вам нужно присоединиться кAnswer
более одного раза.