使用PHP

时间:2016-12-31 03:22:46

标签: php html mysql

我正在寻找一种方法,以类似于电子表格的方式跨多个列显示MySQL数据库中的数据。

我还没有开始使用桌面设计,因为我不确定实现我想要的最佳方法。

我考虑过以下事项:

TABLE 1 - Homework Task

id (INT)

task (VARCHAR)

此表只是一个家庭作业列表

TABLE 2 - Students

id (INT)

studentName (VARCHAR)

这只是一个学生名单

TABLE 3 - Homework Grades

id (INT)

homeworkTaskId (INT)

studentId (INT)

grade (VARCHAR)

percentage (DECIMAL)

这将为每个学生的每项作业任务保留标记

现在,我想要实现的是能够显示如下数据:

enter image description here

我正在努力学习的是我对SQL命令的了解,并知道是否有可能以这种方式检索数据,以便我可以循环显示这种格式?

我正在使用PHP与MySQL数据库的PDO连接。

非常感谢您提供任何可能的协助。

2 个答案:

答案 0 :(得分:0)

我会使用2个查询,它更简单,如果你通过家庭作业表中的外键(student.id)查找它,它应该足够快,性能不会成为问题。

   $DB = new PDO('mysql:host='.$conf['dbhost'].';dbname='.$conf['dbname'], $conf['dbuser'], $conf['dbpass']);

   $students_stmt =  $DB->query('SELECT * FROM students');

   $homework_stmt = $DB->prepare('
       SELECT
            h.id, h.grade, h.percentage, ht.task 
       FROM
            homework AS h
       JOIN
            homework_task AS ht
       ON
          ht.id = t.homeworkTaskId
       WHERE
           h.studentId = :student_id
   ');


   $data = [];

   $max_homework = 0; //maximum number of homework records

   while( false !== ( $student = $students_stmt->fetch(PDO::FETCH_ASSOC) )){

       $homework_stmt->execute([':studentId'=>$student['id']]);

       $i = 1;
       while( false !== ( $homework = $homework_stmt->fetch(PDO::FETCH_ASSOC) )){
          $student["homework_$i"] = $homework;
          ++$i;
       }
       if( $i > $max_homework )  $max_homework = $i;

       $data[] = $student;
   }

你最终会得到像这样的数组

 $data = [ 0 =>   //first student
     [
        'studentName' => 'Some Guy',
        'homework_1' => [
            'grade' => 'A',
            'percentage' => '92'
        ],
        'homework_2' => [
            'grade' => 'B',
            'percentage' => '85'
        ]
        'homework_3' => [ .... ]
     ], 1 => [ ... //second student ]
  ];

然后你可以遍历$data并创建表格

$max_homework是因为当你去展示它时,你需要知道你需要多少作业列([组,百分比]),你可以在表格中创建适当数量的标题并填写那些少得多的学生。因此,如果有意义,表中的每一行都有相同数量的单元格。也就是说,如果家庭作业记录的数量因学生而异。

顺便说一下,这段代码未经测试,因为我无法知道表格的完整架构。这只是最简单方法的一个例子(使用PDO)。

答案 1 :(得分:0)

这是一个应该让你入门的php文档的例子。 $ row将采用数据库中字段的名称,因为我们选择了result-> fetchassoc

<?
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if ($mysqli->connect_errno) {
    printf("Connect failed: %s\n", $mysqli->connect_error);
    exit();
}

$query = "SELECT * FROM table ORDER by ID";

if ($result = $mysqli->query($query)) {

/* fetch associative array */
while ($row = $result->fetch_assoc()) {
    echo "<div>".$row['studentname']."</div>";
    echo "<div>".$row['studentgrade']."</div>";
}

/* free result set */
$result->free();
}

/* close connection */
$mysqli->close();
?>