使用MySQL和PHP显示从多个连接表获得的信息

使用MySQL和PHP显示从多个连接表获得的信息,php,mysql,junction-table,Php,Mysql,Junction Table,这是一个课程安排应用程序。课程表(id、开始时间、结束时间等)将通过连接表(通过id)链接到学生表(id、名字、姓氏等)和教师表(id、名字、姓氏等)。这些都是多对多关系。课程可以有多个学生,学生可以有多个课程。教师也是如此 我的问题是,获取和显示数据的最佳方式是什么?我希望能够列出每节课的日期排序,以及在课上的学生和课上的老师 一种方法是使用sql查询,该查询将查找所有课程,并通过它们的连接表连接所有表。然后使用循环将它们全部吐出到页面上的表中。我遇到的问题是,创建的表在不同的行上列出了相同的

这是一个课程安排应用程序。课程表(id、开始时间、结束时间等)将通过连接表(通过id)链接到学生表(id、名字、姓氏等)和教师表(id、名字、姓氏等)。这些都是多对多关系。课程可以有多个学生,学生可以有多个课程。教师也是如此

我的问题是,获取和显示数据的最佳方式是什么?我希望能够列出每节课的日期排序,以及在课上的学生和课上的老师

一种方法是使用sql查询,该查询将查找所有课程,并通过它们的连接表连接所有表。然后使用循环将它们全部吐出到页面上的表中。我遇到的问题是,创建的表在不同的行上列出了相同的课程,以说明每个学生和老师。当尝试按课程开始时间或id浏览时,这会产生一个非常冗余的列表

让每节课在包含所有学生的学生列和包含所有教师的教师列的列表中显示为一行的最佳方式是什么

如果不清楚,很抱歉。感谢您的任何意见,如果我需要澄清或添加更多细节,请告诉我

表列:

学生表
studentID firstName lastName电子邮件等

教师表
教师ID姓氏姓氏电子邮件等

课程表
莱索尼德开始时间结束时间

课程/学生积分表
juncID lessonFK学生fk

课程/教师积分表
juncID lessonFK教师fk

期望输出:

更新:我在哪里。我想我明白了

<?php $lesson_set = find_all_lessons(); ?>
            <table>
                <tr>
                    <td>Start Time</td>
                    <td>Lesson ID</td>
                    <td>Teachers</td>
                    <td>Students</td>

                </tr>

            <?php while($lesson = mysqli_fetch_assoc($lesson_set)) { ?>

                <tr>
                    <td><?php echo htmlentities($lesson["startTime"]); ?></td>
                    <td><?php echo htmlentities($lesson["lessonID"]); ?></td>
                    <td><?php
                        $teachers_in_lesson_set = find_teachers_by_lesson_id($lesson["lessonID"]);

                        while($lesson_teacher = mysqli_fetch_assoc($teachers_in_lesson_set)) {
                            echo htmlentities ($lesson_teacher["firstName"]." ".$lesson_teacher["lastName"].", ");

                        }


                    ?></td>

                    <td><?php 
                        $students_in_lesson_set = find_students_by_lesson_id($lesson["lessonID"]);

                        while($lesson_student = mysqli_fetch_assoc($students_in_lesson_set)) {
                            echo htmlentities ($lesson_student["firstName"]." ".$lesson_student["lastName"].", ");

                        }

                    ?></td>



                </tr>
            <?php } ?>
</table>
“按课程查找教师”id函数与“学生”函数相同,只是访问教师表


在实践中,这是可行的,但有人能对结构进行评论吗?这是一个可接受的解决方案,还是会在以后的道路上给我带来问题?再次感谢您的所有意见

好的,这会让你进入思维定势

为了简化,我使用id作为选择器,但是您可以通过POST或GET变量使用任何东西,或者干脆删除WHERE子句来获取所有数据

$query = "SELECT lessonID, startTime
FROM lessonTable 
WHERE id = '$id'";
$lessonResult = mysqli_query($link, $query);

$query = "SELECT firstName 
FROM studentTable 
WHERE id = '$id'";
$studentResult = mysqli_query($link, $query);

$query = "SELECT firstName 
FROM teacherTable 
WHERE id = '$id'";
$teacherResult = mysqli_query($link, $query);

echo "<table>";
while ($row = mysqli_fetch_array($lessonResult)) {
    echo "<tr>"
    echo "<td>{$row['startTime']}</td>";
    echo "<td>{$row['lessonID']}</td>";
    echo "<td>";
    while ($row = mysqli_fetch_array($teacherResult)) {
        $firstNameString = implode(',', $row['firstName']);
        echo $firstNameString;
    }
    echo "</td>";
    echo "<td>";
    while ($row = mysqli_fetch_array($studentResult)) {
        $firstNameString = implode(',', $row['firstName']);
        echo $firstNameString;
    }
    echo "</td>";
    echo "</tr>"
}
echo "</table>";

mysqli_free_result($lessonResult);
mysqli_free_result($teacherResult);
mysqli_free_result($studentResult);
$query=“选择lessonID,开始时间
从课桌上
其中id=“$id”;
$lessonResult=mysqli_query($link,$query);
$query=“选择firstName
从学生桌
其中id=“$id”;
$studentResult=mysqli_查询($link,$query);
$query=“选择firstName
从教师桌上
其中id=“$id”;
$teacherResult=mysqli\u查询($link,$query);
回声“;
while($row=mysqli\u fetch\u数组($lessonResult)){
回声“”
回显“{$row['startTime']}”;
回显“{$row['lessonID']}”;
回声“;
while($row=mysqli\u fetch\u数组($teacherResult)){
$firstNameString=内爆(“,”,$row['firstName']);
echo$firstNameString;
}
回声“;
回声“;
while($row=mysqli\u fetch\u数组($studentResult)){
$firstNameString=内爆(“,”,$row['firstName']);
echo$firstNameString;
}
回声“;
回声“”
}
回声“;
mysqli_free_result($lessonResult);
mysqli_免费_结果($teacherResult);
mysqli_免费_结果($studentResult);

发布一张图表,说明您希望表格和输出的样子。我已经添加了表格列和所需的输出。感谢您在数据库布局方面走对了轨道,但这是一个相当复杂的查询,请看一下“内部联接”和“子”查询。请在之前完成,然后将您尝试过的内容发回。对不起,你只是觉得你想让我们为你做这件事。这个网站太棒了:我以前从来没有做过这样的事情,我脑子里有我认为可行的方法。与其在这两方面都浪费时间,我想我应该看看是否有人曾经做过类似的事情来让我走上正确的方向。我将尝试实施你的一些帖子,并向你汇报。谢谢你的意见!我想我明白了。谢谢你的帮助!
$query = "SELECT lessonID, startTime
FROM lessonTable 
WHERE id = '$id'";
$lessonResult = mysqli_query($link, $query);

$query = "SELECT firstName 
FROM studentTable 
WHERE id = '$id'";
$studentResult = mysqli_query($link, $query);

$query = "SELECT firstName 
FROM teacherTable 
WHERE id = '$id'";
$teacherResult = mysqli_query($link, $query);

echo "<table>";
while ($row = mysqli_fetch_array($lessonResult)) {
    echo "<tr>"
    echo "<td>{$row['startTime']}</td>";
    echo "<td>{$row['lessonID']}</td>";
    echo "<td>";
    while ($row = mysqli_fetch_array($teacherResult)) {
        $firstNameString = implode(',', $row['firstName']);
        echo $firstNameString;
    }
    echo "</td>";
    echo "<td>";
    while ($row = mysqli_fetch_array($studentResult)) {
        $firstNameString = implode(',', $row['firstName']);
        echo $firstNameString;
    }
    echo "</td>";
    echo "</tr>"
}
echo "</table>";

mysqli_free_result($lessonResult);
mysqli_free_result($teacherResult);
mysqli_free_result($studentResult);