在这里忍受我 - 这可能有点令人困惑。
我正在使用SQL检索两组数据。这是代码,带有查询。我正在使用Zend Framework。
$assignments = $db->fetchAll("SELECT id,name,class FROM assignments");
foreach($assignments as $a) {
$assignmentID = $a['id'];
$studentData = $db->fetchAll(
"SELECT student,assignment,status,assignmentID FROM student_assignments WHERE assignmentID='$assignmentID'"
);
echo "<th>".$a['name']."</th>";
foreach($studentData as $s) {
$bottom .= "<tr><td>" . $s['student'] . " " . $s['assignmentID']
. " ".$s['status'] . "</td></tr>";
$i++;
}
}
echo "</tr>$bottom;";
以下是HTML中输出的内容:
|Assignment on 07/07/2012| |Assignment on 07/12/2012| |Assignment on 07/15/2012|
117 1 Y
332 1 N
36 1 N
420 1 N
332 1 Y
326 2 N
212 2 N
461 2 N
117 2 N
212 2 N
212 3 N
326 3 N
117 3 Y
420 3 Y
现在顶部工作得很好 - 它动态地显示数据库中的每个分配。但我一直试图找到一种方法来获取在这些列下显示的相应数据,但没有效果。这是我最接近使它看起来有点正确的。
基本上,中间有“2”和“3”的数据应分别进入第2和第3列。但这并没有发生,因为所有数据都存储在$ bottom变量中,而不是每个赋值的数据。
有没有人有任何建议?这让我发疯,我觉得解决方案正在盯着我。
谢谢!
答案 0 :(得分:1)
首先,您要遍历每个学生作业,然后将作业表加入其中,这样您就可以知道与其相关的作业名称。
$students = $db->fetchAll('SELECT sa.student,sa.assignment,sa.status,sa.assignmentID,a.name
FROM student_assignments AS sa
LEFT JOIN assignments AS a ON sa.assignmentID=a.id');
然后使用结果,您可以构建一个数组以重新组合具有相同赋值的每个人:
$columns = Array();
foreach($students as $s) {
$row = '<tr><td>'.$s['student'].' '.$s['assignmentID'].' '.$s['status'].'</td></tr>';
array_push($columns[$s['name']], $row);
}
然后使用此数组,您最终可以打印您的内容:
foreach ($columns as $key=>$value) {
echo '<th>'.$key.'</th>';
foreach ($value as $v) {
echo $v;
}
}
当然这可以更紧凑(减少为嵌套循环),我无法完全测试它,但它应该在你的过程中帮助你;)