我设计了一个小型PHP程序来存储我们分支机构的数据发送(账户和分钟)。
以下是主表(reports
)的数据库结构。 (其中存储了所有传入报告的记录)
|Column|Type|Null|Default
|//**rid**//|int(11)|No| <-- Primary Key (Report ID)
|bid|int(2)|No| <-- Branch ID (data from `branches` table)
|mid|int(2)|No| <-- Month ID (data from `mns` table)
|yid|int(4)|No| <-- Year ID (year)
|minutes|int(1)|No|
|accounts|int(1)|No|
|added|timestamp|No|CURRENT_TIMESTAMP
存储数据后,它将如下所示(它将包含100多条记录);
| rid | bid | mid| | yid | minutes | accounts | added
| 1 | 1 | 1 | 2015 | 1 | 1 | current_time_stamp
| 2 | 2 | 2 | 2015 | 1 | 0 | current_time_stamp
| 3 | 2 | 3 | 2015 | 1 | 1 | current_time_stamp
现在我想将这些记录打印成以下格式
我只想生成所有分支的年度报告。
系统用户必须选择一年。 (在这里,我选择2015年作为报告年度)
| branch(bid) | january | february | march | blah blah blah
| accounts | minutes | accounts | minutes |accounts | minutes |
1 | 1 | 1 | | 1 | 1
2 | | 1 | 1
我写了一个SQL查询
SELECT reports.*, branches.bname, mns.mname FROM ((reports INNER JOIN branches ON reports.bid = branches.bid) INNER JOIN mns ON reports.mid = mns.mid) WHERE yid='$year' ORDER BY mns.mid
请帮我打印上述格式的数据。
答案 0 :(得分:0)
您必须按如下方式转换数组
Array
(
[2015] => Array
(
[1] => Array
(
[1] => Array
(
[minutes] => 1
[accounts] => 1
)
)
[2] => Array
(
[2] => Array
(
[minutes] => 1
[accounts] => 0
)
[3] => Array
(
[minutes] => 1
[accounts] => 1
)
)
)
)
为此,只需使用简单的SELECT
查询。
SELECT r.*, b.bname, m.mname
FROM reports r INNER JOIN branches b ON r.bid = b.bid
INNER JOIN mns m ON r.mid = m.mid
WHERE yid='$year';
我不知道你从上面的查询获得的数组结构...
我正在给你带有数组结构的代码......
在你得到表单查询的结果数组中实现它,否则将该数组提供给我......
我的解决方案代码如下。
$array = array(
array('rid'=>1,'bid'=>1,'mid'=>1,'yid'=>2015,'minutes'=>1,'accounts'=>1),
array('rid'=>2,'bid'=>2,'mid'=>2,'yid'=>2015,'minutes'=>1,'accounts'=>0),
array('rid'=>3,'bid'=>2,'mid'=>3,'yid'=>2015,'minutes'=>1,'accounts'=>1)
);
$new = array();
foreach($array as $r){
$new[$r['yid']][$r['bid']][$r['mid']] = array('minutes'=>$r['minutes'],'accounts' => $r['accounts']);
}
echo '
<table width="100%" border="1px" align="center">
<thead>
<tr>
<th rowspan="2">Branch</th>
<th colspan="2">Jan</th>
<th colspan="2">Feb</th>
<th colspan="2">Mar</th>
<th colspan="2">Apr</th>
<th colspan="2">May</th>
<th colspan="2">Jun</th>
<th colspan="2">Jul</th>
<th colspan="2">Aug</th>
<th colspan="2">Sep</th>
<th colspan="2">Oct</th>
<th colspan="2">Nov</th>
<th colspan="2">Dec</th>
</tr>
<tr>';for($i=0;$i<12;$i++)echo '
<th>Min</th>
<th>Acc</th>';echo '
</tr>
</thead>
<tbody>';foreach($new[2015] as $k => $r){
echo '<tr align="center"><td>'.$k.'</td>';for($i=0;$i<12;$i++){
if(isset($r[$i])) echo '<td>'.$r[$i]['minutes'].'</td><td>'.$r[$i]['accounts'].'</td>';
else echo '<td></td><td></td>';
}
echo '</tr>';
}echo '
</tbody>
</table>
';
echo '<pre>';print_r($new);