php mysqli中的学习表连接

php mysqli中的学习表连接,php,mysql,Php,Mysql,我正试着将我的头脑集中在标准化表上。我在下面编写的代码是为了演示而不是生产。我创建了两个表,一个users表和一个eye_color表,这样我就可以在这两个表之间建立一对多的关系 我想做的是按名称显示用户及其眼睛颜色,但即使尝试返回结果对我来说也很困难,我想知道我哪里出错了我已经查找和搜索了,但我从讨论中学到了更多: $sql = "SELECT * FROM users INNER JOIN eye_color ON user.eye_co

我正试着将我的头脑集中在标准化表上。我在下面编写的代码是为了演示而不是生产。我创建了两个表,一个users表和一个eye_color表,这样我就可以在这两个表之间建立一对多的关系

我想做的是按名称显示用户及其眼睛颜色,但即使尝试返回结果对我来说也很困难,我想知道我哪里出错了我已经查找和搜索了,但我从讨论中学到了更多:

$sql = "SELECT * 
        FROM users 
        INNER JOIN eye_color 
        ON user.eye_color = eye_color.id";

$result = mysqli_query($conn, $sql);


if (mysqli_num_rows($result)  > 0) {
    while($row = mysqli_fetch_assoc($result) ) {
        echo $row['id'];
        echo $row['eye_color'];
    }
} else{
    echo 'No results';
}
我不是在寻找一个直截了当的答案,我是在寻求建议,这样我才能继续前进,继续我的理解

我的表结构如下所示:

Table name: users
id (PK)
name
email (Unique)
eye colour (FK)

Table name: eye_color
id (PK)
color

您有一个语法错误。并在查询中添加回勾号。用户是保留用户


您有一个语法错误。并在查询中添加回勾号。用户是保留用户


鉴于users.eye\u color引用了eye\u color.id,您的查询似乎没有问题。 我在代码中看到的问题是,您试图使用$row['eye\u color']来显示颜色的名称,而这将是eye\u color的ID。您应该使用$row['color']

一般来说,要调试这样的问题,可以执行var_dump$行,这样就可以准确地看到结果包含哪些键/值

// ...
if (mysqli_num_rows($result)  > 0) {
    while($row = mysqli_fetch_assoc($result)) {
       var_dump($row);
       //...
    }
} else {
    echo 'No results';
}

鉴于users.eye\u color引用了eye\u color.id,您的查询似乎没有问题。 我在代码中看到的问题是,您试图使用$row['eye\u color']来显示颜色的名称,而这将是eye\u color的ID。您应该使用$row['color']

一般来说,要调试这样的问题,可以执行var_dump$行,这样就可以准确地看到结果包含哪些键/值

// ...
if (mysqli_num_rows($result)  > 0) {
    while($row = mysqli_fetch_assoc($result)) {
       var_dump($row);
       //...
    }
} else {
    echo 'No results';
}


您可能需要左连接而不是内部连接。对于一个用户来说,会有很多可能的眼睛颜色吗?如果有的话,加入你need@PeterDarmis好在本例中,将为每个用户提供一只眼睛colour@aynber伟大的资源,我已将其添加为书签。@PeterDarmis-如果用户可能根本没有眼睛颜色,或者眼睛颜色表中没有显示眼睛颜色列值,则需要左连接,因为FK约束在这种情况下不可能。您可能需要左连接而不是内部连接参加对于一个用户来说,会有很多可能的眼睛颜色吗?如果有的话,加入你need@PeterDarmis在这个例子中,每个用户都会有一只眼睛colour@aynber很好的资源,我已经将其添加到书签中。@PeterDarmis-如果用户可能根本没有眼睛颜色,或者眼睛颜色表中没有显示眼睛颜色列值,则需要左连接,而在这种情况下,由于FK约束,这是不可能的。噢,哇,所以我真的理解了我想要实现的目标,非常感谢你发现了这一点!那么,使用这样的连接,是否可以通过回显eye_color行来输出eye color的string/varchar?现在您可以@danjbh从数据库中获取您真正需要的数据,即用户名和颜色,如果您也需要电子邮件,也可以获取这些数据。。。为什么所有*?我只是用*来测试这一点,我知道这绝对不是一个好的做法,但现在只是为了获取结果,以便我能够理解如何使用连接来获取我需要的数据。这对我来说是完全有意义的。我说得对,但我显然犯了错误。还有,为什么要使用反勾号?这是更好的语法还是有什么好处?哦,哇,所以我真的理解了我想要实现的目标,非常感谢你发现了这一点!那么,使用这样的连接,是否可以通过回显eye_color行来输出eye color的string/varchar?现在您可以@danjbh从数据库中获取您真正需要的数据,即用户名和颜色,如果您也需要电子邮件,也可以获取这些数据。。。为什么所有*?我只是用*来测试这一点,我知道这绝对不是一个好的做法,但现在只是为了获取结果,以便我能够理解如何使用连接来获取我需要的数据。这对我来说是完全有意义的。我说得对,但我显然犯了错误。还有,为什么要使用反勾号呢?这是更好的语法还是有什么好处?谢谢你的贡献,使它更有意义。谢谢你的贡献,使它更有意义。