将数据库记录打印到不同的视图

时间:2017-12-11 05:17:34

标签: php mysql

我设计了一个小型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

请帮我打印上述格式的数据。

1 个答案:

答案 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);