отображать каждое поле 'StudentAnswer' как каждое из связанных с ним полей 'AnswerContent' (php) - PullRequest
1 голос
/ 20 октября 2011

Есть две таблицы, одна - таблица ответов, а другая - таблица StudentAnswer. Есть 6 полей, которые меня интересуют, 4 в таблице ответов и 2 из таблицы StudentAnswer. Ниже приведены таблицы, их поля и данные.

Answer Table:

  QuestionId     AnswerId    AnswerContent   AnswerCorrect
   1             1           Leeds                1 (true)
   2             2           Manchester           0 (false)
   3             3           Birmingham           0 (false)

StudentAnswer Table:

    StudentAnswer  QuestionId
        2                1
        3                1
        1                1

(Поле StudentAnswer содержит AnswerId, это ответы учеников в зависимости от того, какой ответ они выбрали для какого вопроса)

Теперь эти поля и другие поля хранятся в массиве, который отображается в таблице. Код PHP для этого ниже:

<table border='1'>
      <tr>
      <th>Session ID</th>
      <th>Question Number</th>
      <th>AnswerContent</th>
      <th>StudentAnswer</th>
      <th>Student ID</th>
      </tr>
      <?php

        while ($row = mysql_fetch_array($result)) {

            echo "
      <tr>
      <td>{$row['SessionId']}</td>
      <td>{$row['QuestionNo']}</td>
      <td>{$row['AnswerContent']}</td>
      <td>{$row['StudentAnswer']} </td>
      <td>{$row['StudentId']}</td>
      </tr>";
        }
      ?>

Ниже показано, что он выводит в данный момент из запроса и массива:

Session ID  Question Number Answerid  AnswerContent     StudentAnswer    Student ID       
 ABB          1              1          Leeds                  1           u0867587   
 ABB          1              1          Leeds                  3           u1231231

Строка 1 показывает, что ученик u0867587 положил для своего ответа на вопрос 1. Правильный ответ - Лидс, и, поскольку он выбрал ответ «1», то есть Лидс, его ответ учащегося - Лидс, но, очевидно, поскольку StudentAnswer - это поле int, которое он отображает это как «1». Строка 2 показывает, что студент u1231231 ответил на тот же вопрос, очевидно, правильный ответ по-прежнему Лидс, но он выбрал Бирмингем, который отвечает «3», поэтому его ответ - «Бирмингем», но, поскольку StudentAnswer является полем int, он отображает его как «3». в поле AnswerId, чтобы оно отвечало на слова answerId

Вот что я действительно хочу вывести:

Session ID  Question Number   AnswerId AnswerContent     StudentAnswer     Student ID       
     ABB          1               1       Leeds               Leeds            u0867587   
     ABB          1               1       Leeds               Birmingham       u1231231

Выводит то же, что и выше, но вместо того, чтобы отображать его как int из поля StudentAnswer, он отображает его как слово answer с использованием AnswerContent. Поэтому AnswerContent автоматически связывается с Answerid, но я также хочу связать его с StudentAnswer.

Поле StudentAnswer совпадает с полем AnswerId, поскольку оно извлекает идентификатор ответа в зависимости от того, что студент выбрал для своего ответа.

Я попробовал $row['StudentAnswerContent'] == $row['StudentAnswer'] = $row['AnswerContent'];, но это не сработало. Как я могу отобразить answercontent для каждого StudentAnswer?

Ниже приведен запрос:

SELECT 
    SessionId,
    q.QuestionNumber,
    a.AnswerContent,
    a2.AnswerContent as StudentAnswerContent,
    StudentId
FROM Question q
    INNER JOIN StudentAnswer sa ON q.QuestionId = sa.QuestionId
    JOIN Answer a ON sa.QuestionId = a.QuestionId  
    JOIN Answer a2 ON sa.StudentAnswer = a2.AnswerId
WHERE
    (CorrectAnswer = '1')
ORDER BY $orderfield ASC";

Как вывести его как массив $ row ['...'] в массиве?

1 Ответ

0 голосов
/ 20 октября 2011

Ваш опубликованный запрос выглядит нормально, за исключением того, что вам необходимо указать псевдоним таблицы для CorrectAnswer в предложении WHERE, поскольку он неоднозначен (может исходить из Answer a или Answer a2:

WHERE
    (a.CorrectAnswer = '1')
     ^^ specify alias

Рабочая демонстрация: http://sqlize.com/Wk0LXJQ7De

Кроме того, поскольку ваша колонка называется StudentAnswerContent, в которой содержится текст ответа учащегося, вам необходимо изменить это в своем PHP:

<td>{$row['StudentAnswerContent']} </td>
                        ^^^^^^^ add "Content"

Для дальнейшего использования : полезно, если вы публикуете точную схему таблицы. Отсутствует таблица Question (QuestionId, QuestionNumber), а столбец в Answer называется CorrectAnswer not AnswerCorrect. Также понятия не имею, откуда StudentId и SessionId должны поступить. Кроме того, если вам нужна помощь с запросом, это как бы помогает разместить запрос в вашем посте, с которым вы работаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...