使用嵌套循环遍历多个数据库表?

时间:2017-02-10 12:12:43

标签: php mysql sql

我的数据库中有三个表。学生,模块和关系。关系表的每一行都包含一个学生ID和一个模块ID(即它包含学生所采用的模块)。

我试图遍历关系表并查找特定学生所需的所有模块,然后打印出每个模块的详细信息(例如名称和模块代码)。

我尝试使用嵌套循环执行此操作,但内部循环仅运行一次并打印出第一个模块。我认为这与我的while循环中的第二个SQL查询有关,并且$m_id没有得到每次迭代的更新。这是我到目前为止的代码

<?php
        include 'connect.php';
        $sql = "SELECT * FROM relations WHERE student_id = '1'";
        $result = $conn->query($sql);
        if($result->num_rows > 0) {
            while($row = mysqli_fetch_array($result)) {
                $m_id = $row["module_id"];

                $sql = "SELECT * FROM modules WHERE module_id = $m_id";
                $result = $conn->query($sql);
                if($result->num_rows > 0) {
                    while($row = mysqli_fetch_array($result)) {
                        echo $row["module_code"];
                    }
                }
            }
        }
?>

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您可以更改SELECT查询,使其使用INNER JOIN将特定学生的所有模块放在一个查询中。像这样:

SELECT * FROM modules
INNER JOIN relations ON relations.module_id = modules.module_id
WHERE relations.student_id = 1;

这样,它会带来所有与ID为1的学生有关系的模块,假设它是您希望搜索其模块的学生。 然后你只需遍历结果数组并从你想要的模块中获取值。