php - 将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>
解决方案
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
推荐阅读
- r - 向 geom_hline 添加点
- javascript - JavaScript - 重新加载图像。Mapbox GL JS 静态地图无法加载,错误 404
- python - 为什么这会返回 RuntimeWarning: Enable tracemalloc to get the object allocation traceback
- continuous-integration - 允许基于 `if` 和 `changes` 子句手动运行作业
- postgresql - Heroku 在 DATABASE_URL 中使用 postgres:// 而不是 postgresql://
- spring-boot - 视频 - 使用 s3 内容存储流慢
- visual-studio-code - 如何从 VS Code 调试器获取错误日志?
- javascript - 如何删除 json 文件中的特定部分
- eloquent - 我在 Laravel 中有一个一对多的数据库关系,并想在 Eloquent 中过滤结果
- assembly - 销毁 NASM x86 程序集中的变量