【问题标题】:Get records from database in table with rowspan从具有行跨度的表中的数据库中获取记录
【发布时间】:2016-10-25 16:31:11
【问题描述】:

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

<?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 查询是否正确?

这两个表是:
课程(课程名称 - 课程 ID)
学生(学生姓名 - 课程 ID)

【问题讨论】:

  • 你能告诉我你需要什么确切的输出
  • “名称”列指的是什么?您描述的“学生”表不包含此类字段。以及“课程”表。
  • 名称 = 课程名称! .. 输出显示课程名称和学生姓名(一行中所有参加此课程的学生姓名)

标签: php database html-table


【解决方案1】:

试试这个查询

$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> ";

【讨论】:

  • 行跨度完美!但它会在一行中打印出所有学生,即使课程 ID 不同的学生也是如此!
【解决方案2】:

这一行:

 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";

【讨论】:

    【解决方案3】:

    请使用以下格式

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

    谢谢

    【讨论】:

      【解决方案4】:

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

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

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

      这是你所期待的吗?

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

      【讨论】:

      • 它只打印出数据库中第一个课程名称和数据库中所有学生姓名在同一行的一行!!即使是具有不同课程 ID 的课程!
      【解决方案5】:

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

      SELECT CourseName, GROUP_CONCAT(Studentname SEPARATOR ', ') as names
      FROM Course p NATURAL JOIN Student t
      GROUP BY CourseName;
      

      【讨论】:

      • 是的,这就是我的意思,我已经将代码更改为你给我的,但它仍然给我一个错误说:mysql_fetch_array() 期望参数 1 是资源,给定的布尔值
      • 这意味着查询有错误。你能发布你对这两个表的 CREATE TABLE 查询吗?我对您的数据库结构的假设在某些方面可能不正确
      • 如果您至少可以在查询后发布 mysql_error() 返回的字符串,那就太好了。
      • CREATE TABLE Course (CID number(8) , Course_name var(30), CONSTRAINT PK PRIMARY KEY (CID) )
      • CREATE TABLE Student (SID number(8) , Student_name var(30), CID number(8), CONSTRAINT PK PRIMARY KEY (SID) )
      【解决方案6】:

      您好,请看一下这个答案。 Dynamic rowspan while fetching records from database

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-29
        • 2010-09-22
        • 2022-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-19
        相关资源
        最近更新 更多