学习表加入php mysqli

时间:2016-12-23 14:05:12

标签: php mysql

我试图围绕规范化表格,我下面放在一起的代码是用于演示目的而不是生产。我创建了两个表,一个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

我不是在寻找一个直接的答案我正在寻求建议,所以我可以继续前进并继续我的理解。

我的表格结构如下:

{{1}}

2 个答案:

答案 0 :(得分:3)

您遇到语法错误。另外,在查询中添加反向标记。 user是保留的MySQL keyword

$sql = "SELECT `users`.`name`,`eye_color`.`color` 
        FROM `users` 
        INNER JOIN `eye_color` 
        ON `users`.`eye_color` = `eye_color`.`id`"; // not `user`.`eye_color`

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


if (mysqli_num_rows($result)  > 0) {
    while($row = mysqli_fetch_assoc($result) ) {
        echo $row['name'];
        echo $row['color'];
    }
} else{
    echo 'No results';
}

答案 1 :(得分:2)

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

通常,要调试此类问题,您可以执行var_dump($row),这样您就可以确切地看到结果包含的键/值。

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