【问题标题】:Undefined index when using inner join SQL statement使用内连接 SQL 语句时未定义的索引
【发布时间】:2018-11-09 13:05:33
【问题描述】:

您好,我正在尝试编写 SQL 语句来填充表,但我不断收到错误消息:

未定义索引:st.Name,未定义索引:s.Name。

我不明白为什么会这样,因为我在 SQL 语句中选择了它们。我不太擅长 SQL,因此不胜感激。

<?php
ini_set("display_errors", 1);
try{
    $stmt = $conn->prepare(
        "SELECT st.Name, s.Name
        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['st.Name'].'</td>
                <td>'.$row['s.Name'].'</td>
         </tr>
        ';
    }
}
catch(PDOException $e)
{
    echo "error".$e->getMessage();
}
?>

【问题讨论】:

    标签: mysql sql join pdo


    【解决方案1】:

    存在多个问题。首先,您认为可以使用&lt;table/alias-name&gt;.&lt;column/alias-name&gt; 访问这些列值的假设是错误的。相反,它们只能使用列名或定义的别名来访问。

    现在,在这种情况下,您有两个具有相同名称的列。因此,您应该为它们定义不同的别名,以避免模棱两可的行为。我已经定义了它们student_namesport_name

    定义别名后,您现在可以仅使用别名名称访问这些列值。

            $stmt = $conn->prepare(
              "SELECT st.Name AS student_name, 
                      s.Name AS sport_name 
              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_name'].'</td>
                  <td>'.$row['sport_name'].'</td>
                </tr>
              ';
            }
    

    【讨论】:

    • 或者更好地命名它们为studentsport ;)
    • 谢谢它的工作,然后我又得到了两个运动 T2_Choice 和 T3_Choice。一个人将如何实现这些,因为它们也将作为 s_name 返回
    • @TobyDixonSmith btw ,您可以为另外两项运动设置不同的别名;他们没有相同别名的限制
    猜你喜欢
    • 2018-05-15
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 2015-01-02
    • 2020-05-27
    • 1970-01-01
    • 2017-11-25
    • 2010-12-20
    相关资源
    最近更新 更多