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



我的数据库中有三个表。学生、模块和关系。关系表的每一行都包含一个学生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"];
                    }
                }
            }
        }
?>

谁能帮我解决这个问题?

您可以更改 SELECT 查询,使其使用 INNER JOIN 将特定学生的所有模块引入一个查询中。喜欢这个:

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

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

相关内容

最新更新