MYSQL php пара таблиц не работает

#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 более одного раза.