首页 > 解决方案 > 将zk log签入和签出插入数据库中的一行

问题描述

我正在使用zkteco-sdk-php从 ZK 考勤设备中检索数据。

结果是这样的

用户标识符 ID 姓名 状态 日期 时间 类型
55 275 雇用1 指纹 19-06-2021 08:14:16 报到
55 275 雇用1 指纹 19-06-2021 11:15:20 查看

*所有数据不是按用户排序的,而是按第一次指纹考勤排序的,所以日志与不同的用户和不同的考勤类型混在一起

我想将检索到的数据插入数据库问题是每个日志(签入或签出)作为单行检索数据我想在同一天插入(签入&&签出同一用户)排 )

这就是我的目标

ID 用户身份 报到 查看
55 275 19-06-2021 08:14:16 19-06-2021 11:15:20

这是从 zk 检索数据的代码

                    $attendance = $zk->getAttendance();
                    if (count($attendance) > 0) {
                        $attendance = array_reverse($attendance, true);
                        sleep(1);
                        foreach ($attendance as $attItem) {
                            ?>
                            <tr>
                                <td><?php echo($attItem['uid']); ?></td>
                                <td><?php echo($attItem['id']); ?></td>
                                <td><?php echo(isset($users[$attItem['id']]) ? $users[$attItem['id']]['name'] : $attItem['id']); ?></td>
                                <td><?php echo(ZK\Util::getAttState($attItem['state'])); ?></td>
                                <td><?php echo(date("d-m-Y", strtotime($attItem['timestamp']))); ?></td>
                                <td><?php echo(date("H:i:s", strtotime($attItem['timestamp']))); ?></td>
                                <td><?php echo(ZK\Util::getAttType($attItem['type'])); ?></td>
                            </tr>



标签: phpmysqldata-structureszkteco

解决方案


MySQL:

SELECT
   t1.ID,
   t1.UserID,
   ADDTIME(CONVERT(t1.`date`, DATETIME), t1.`time`) as "Check-in",
   ADDTIME(CONVERT(t2.`date`, DATETIME), t2.`time`) as "Check-out"
FROM table t1
LEFT JOIN table t2 ON t2.ID=t1.ID 
                  and t2.UserID=t1.UserID
                  and t2.Type = 'Check-out'
WHERE 
   ID = 55
   and UserID = 275
   and Type = 'Check-in'

注意:您需要替换table为正确的表名。

关于如何在 PHP 中使用此 SQL 查询的不同示例可以在很多地方找到,例如:Google: how to query MySQL from PHP


推荐阅读