我正在尝试基于数据库中日志中的数据创建报告,如下所示:
id |第一个学生分数|第二个类型分数|第二个分数
1%至23494 %;CAT1%;%50%;
*2*
3个月:23494个月;CAT2个月;35个月。
4个月:23495个月;中期:40个月
到目前为止,我的select语句如下所示:
$res = @mysqli_query ($dbc, "SELECT id, student, type, GROUP_CONCAT(marks) AS mark, GROUP_CONCAT(type) AS types FROM log WHERE class = '1' AND term = '2' GROUP BY student DESC");
// Fetch and print all the records....<br>
while ($row = mysqli_fetch_array($res, MYSQLI_ASSOC)) {
echo '<tr>
<td align="left">'. $row['student'] .'</td>';
//$exams = split(",", $row['exams']); // 4,3,1,2
$marks = split(",", $row['mark']); // 10,20,40,50
foreach( $marks as $mark ) {
echo '
<td align="left">' . $mark . '</td>
';
}
echo '</tr>';
} //End LOOP
//Then i end table
到目前为止,数据显示如下:
学生| CAT1 | CAT2 |期中考试
23494元人民币,50元人民币,50元人民币,35元人民币
23495元人民币,20元人民币,20元人民币,40元人民币。
问题是代码没有根据“类型”排列“标记”(查看id4的中期输出和相应的显示)。
问题:
如何按学生显示结果,后跟相应单元格/组中的标记,如下所示:?
学生| CAT1 | CAT2 |期中考试
23494元人民币,50元人民币,50元人民币,35元人民币
23495元人民币*40
提前谢谢各位。
发布于 2011-08-08 05:26:15
首先,尽量让逻辑远离布局。通常,最好的做法是首先收集所需的数据,然后将其显示出来。
使用GROUP_CONCAT
可能会使事情变得更加复杂,因为您不知道每个学生将获得多少结果,也无法轻松识别哪些分数属于哪种类型。
考虑到这一点,我创建了一个解决方案。当然,您仍然需要扩展查询。
$query = 'SELECT student, type, marks FROM log';
$res = mysqli_query($query);
$studentMarks = array();
while ($row = mysqli_fetch_array($res, MYSQLI_ASSOC))
{
$studentMarks[$row['student']][$row['type']] = $row['marks'];
}
// Now $studentMarks should look like:
// $studentMarks = array(
// 23494 => array('CAT1' => 50, 'CAT2' => 35)
// , 23495 => array('CAT1' => 20, 'MIDTERM' => 40)
// );
echo '<table><thead><tr>';
echo '<td>Student</td><td>CAT1</td><td>CAT2</td><td>MIDTERM</td>';
echo '</tr></thead><tbody>';
foreach($studentMarks as $studentId => $marks)
{
echo '<tr>';
echo '<td>', $studentId, '</td>';
echo '<td>', (isset($marks['CAT1']) ? $marks['CAT1'] : ' '), '</td>';
echo '<td>', (isset($marks['CAT2']) ? $marks['CAT2'] : ' '), '</td>';
echo '<td>', (isset($marks['MIDTERM']) ? $marks['MIDTERM'] : ' '), '</td>';
echo '</tr>';
}
echo '</tbody></table>';
https://stackoverflow.com/questions/6974586
复制相似问题