Выбор нескольких вещей с одним и тем же именем в объединенном операторе SQL - PullRequest
0 голосов
/ 09 ноября 2018

В настоящее время у меня есть оператор SQL, чтобы заполнить таблицу с именем студента и названием вида спорта, которым они занимаются в данный термин. Название спорта хранится в спортивной таблице с Sport_ID. Затем Sport_ID соответствует Choice_ID в таблице выбора. Затем этот Choice_ID помещается в столбец для каждого термина, обозначенного T1_Choice, T2_Choice и T3_Choice в таблице Student_Choices. Как я могу получить T2_Choice и T3_Choice из моего оператора SQL? Спасибо за помощь.

DB Fiddle Link

$stmt = $conn->prepare(
              "SELECT st.Name AS student, s.Name AS sport
              From Sports AS s INNER JOIN Choices AS c
              ON s.Sport_ID = c.Sport_ID INNER JOIN Student_Choices AS sc
              ON sc.T1_Choice = c.Choice_ID INNER JOIN Students AS st
              ON st.Username = sc.Username
              ");
            $stmt->execute();
            while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
              echo '<tr>
              <td>'.$row['student'].'</td>
              <td>'.$row['sport'].'</td>
              <td>'.$row['sport'].'</td>
              <td>'.$row['sport'].'</td>
              </tr>
              ';
            }

1 Ответ

0 голосов
/ 09 ноября 2018

Решением было то, что вы могли вызывать JOIN для таблицы несколько раз. Потому что Choice_ID из Choices необходимо связать с разными вариантами терминов в таблице Student_Choices. Таким образом, вам нужно присоединиться к таблице Choices несколько раз с разными псевдонимами, и для каждого экземпляра вам нужно присоединиться к таблице Sports с другим псевдонимом. Мое решение:

("SELECT st.Name AS student, T1.Name AS T1, T2.Name AS T2, T3.Name AS T3
              From Students AS st INNER JOIN Student_Choices AS sc
              ON st.Username = sc.Username
              INNER JOIN Choices AS c1
              ON sc.T1_Choice = c1.Choice_ID
              INNER JOIN Sports AS T1
              ON c1.Sport_ID = T1.Sport_ID
              INNER JOIN Choices AS c2
              ON sc.T2_Choice = c2.Choice_ID
              INNER JOIN Sports AS T2
              ON c2.Sport_ID = T2.Sport_ID
              INNER JOIN Choices AS c3
              ON sc.T3_Choice = c3.Choice_ID
              INNER JOIN Sports AS T3
              ON c3.Sport_ID = T3.Sport_ID
              ");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...