在水平视图中显示MYSQL查询结果

时间:2010-10-08 10:36:48

标签: php mysql

我们在mysql数据库中有员工考勤系统,但它没有报告功能,我正在尝试使用PHP生成报告。

让我解释一下:

员工每天都要打卡并打卡。这些打卡输入和输出存储在mysql数据库表(出勤)中。此表包含5个字段,如穿入,穿孔,员工,注释,出勤。我们的员工姓名和其他详细信息存储在其他表(员工)中。

我的疑问是我想在水平视图中使用这两个表生成报告。

示例:

column1:员工姓名 第2栏:打入 第3栏:打孔 第4栏:打卡 专栏:打孔

我能够为所有员工生成每日报告,但希望生成每周/每月报告。

请帮助。

感谢, 拉吉

2 个答案:

答案 0 :(得分:1)

听起来你正在尝试进行数据透视查询(切换行和列)。 MySQL不支持此功能,但可以进行模拟。然而,获取所需数据并使用php解析它要容易得多。

这听起来像(这只是猜测)你希望员工成为该员工的第一列和所有打卡输入/输出。

以下是您想要做的事情:

$data = select_all_relevant_data_with_mysql();
$employees = array();
while ($row = $data->fetch()) {
   $employees[$row['employee']][] = array(
      'in' => $row['punchin']
      , 'out' => $row['punchout']
   );
}

(注意这会为每个Employee条目生成未定义的索引通知。你应该处理这个,但它会使代码加倍)。

现在您已经为每位员工安排了打卡/退出数据(希望按顺序,MySQL可以使用ORDER BY轻松处理)。

现在你做一些链接:

foreach ($employees as $name => $punches) {
   echo <<<HTML
      <tr><td>$name</td>
HTML;
   foreach ($punches as $punch) {
      echo <<<HTML
         <td>$punch[in]</td><td>$punch[out]</td>
HTML;
   }
   echo '</tr>';
}

我建议使用像PHPTAL这样的模板系统来做这种事情。无耻的插头:))

答案 1 :(得分:0)

报告格式太模糊了。 应该是:

  • 每个用户一行,然后是所有打孔和打孔作为单行(不太好)。

  • 是否需要汇总打卡/退款,以便给出每个用户在此期间的总工作时间?