0

我已经尝试了很多方法来让这张桌子打印得尽可能好,但我失败了。我知道这很简单,所以我希望你能帮助我。
这是我的代码:

<?php
    include('../connect.php');
    $id=$_SESSION['login_user'];
    $sql = "Select CourseName , Studentname from course p natural join student t"; 
    $rs_result = mysql_query ($sql, $connection); 

    echo "<center>";
    echo "<table>";
    echo "<tr> <th>Course Name</th> <th> Students Name</th>  </tr>";

    // loop through results of database query, displaying them in the table
    while($row = mysql_fetch_array( $rs_result )) {
        // echo out the contents of each row into a table
        echo "<tr>";
        echo '<td>' . $row['CourseName'] . '</td>';
        echo "<td rowspan=''> $row[Studentname] </td> ";
        echo "</tr>";
    }

    echo "</table>"; 
    echo "</center>";
?>

我想成为这样的人

Course   |  Name   |   Student name  |
Math101  |  john, Mike               |
...

另外,两个表之间的 JOIN 查询是否正确?

这两个表是:
Course ( Course name - Course id )
Student ( Student name - Course id )

4

6 回答 6

2

试试这个查询

$sql ="SELECT cor.CourseName,GROUP_CONCAT(stu.StudentName) AS StudentName
        FROM course AS cor
        LEFT JOIN student AS stu
           ON stu.CourseId = cor.CourseId";

并更改下面的行

echo "<td rowspan=''>" . $row['Studentname'] . "</td> ";
于 2012-11-07T13:08:31.793 回答
0

这一行:

 echo "<td rowspan=''> $row[Studentname] </td> ";

您正在不正确地访问数组元素。Studentname应该有单引号,如下所示:

 echo "<td rowspan=''>" . $row['Studentname'] . "</td> ";

此外,在您的查询中,这可能会更好:

$sql = "SELECT c.CourseName, s.StudentName
        FROM course AS c
        INNER JOIN student AS s
           ON s.CourseId = c.CourseId";
于 2012-11-07T12:56:04.440 回答
0

请使用以下格式

SELECT CourseName , Studentname 
    FROM course
    INNER JOIN student
    ON course.id = student.id

谢谢

于 2012-11-07T13:00:02.360 回答
0

问题在于您的rowspan属性 - 您需要为其提供要跨越的确切行数。无论如何,我认为这是collspan您要使用的属性,例如

echo "<td collspan='2'> {$row['Studentname']} </td> ";

这意味着它将跨越 2 列,因此 stundet 的名称将同时位于NameStudent name列下。

这是你所期待的吗?

此外,我强烈建议不要使用mysql_函数,而是学习如何使用mysqli或至少PDO

于 2012-11-07T13:00:18.520 回答
0

我的印象是,您想为每个单独的 CourseName 显示参加每门课程的所有学生的姓名的逗号分隔列表。在这种情况下,您可以将 SQL 查询更改为以下内容:

SELECT CourseName, GROUP_CONCAT(Studentname SEPARATOR ', ') as names
FROM Course p NATURAL JOIN Student t
GROUP BY CourseName;
于 2012-11-07T13:18:33.170 回答
0

您好,请看一下这个答案。从数据库中获取记录时的动态行跨度

我认为这可能会有所帮助。

于 2015-06-06T15:29:14.297 回答