我正在寻找一种方法,以类似于电子表格的方式跨多个列显示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)
这将为每个学生的每项作业任务保留标记
现在,我想要实现的是能够显示如下数据:
我正在努力学习的是我对SQL命令的了解,并知道是否有可能以这种方式检索数据,以便我可以循环显示这种格式?
我正在使用PHP与MySQL数据库的PDO连接。
非常感谢您提供任何可能的协助。
答案 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();
?>