MySQL查询数据库考勤得到in/out
MySQL Query Database Attendance get in/out
我有 Microsoft Access 数据库
Table 检查时间
USERID CHEKTIME
1 2015-06-21 07:34:00
1 2015-06-21 07:50:00
1 2015-06-21 16:00:00
1 2015-06-21 16:48:00
2 2015-06-21 07:08:00
2 2015-06-21 13:48:00
2 2015-06-21 17:08:00
3 ....................
我想将数据传输到 MySQL 查询中,结果为:
userId colDate colIn colOut
1 2015-06-21 07:34:00 16:48:00
2 2015-06-21 07:08:00 17:08:00
3 .......... ........ ........
请帮帮我
这个查询让我无法进行最终测试
为什么数据无法插入到 PHPMyAdmin 中?或者 ms 访问不能声明 MIN 和 MAX 查询?这个函数和查询怎么样:
public function getPresensi(){
$dbName = $_SERVER['DOCUMENT_ROOT']."/presensi-app/assets/database/upj.mdb";
$user = "";
$password = "";
$conn = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=$dbName", $user, $password);
$qry = "SELECT USERID as id, CHECKTIME as check, min(CHECKTIME) as masuk, max(CHECKTIME) as keluar FROM CHECKINOUT group by USERID,date(CHECKTIME)";
$result = odbc_exec($conn,$qry);
while ($data[] = odbc_fetch_array($result));
odbc_free_result($result);
odbc_close($conn);
$tbl = 'tb_kehadiran';
$db_mysql = $this->load->database('default',TRUE);
$db_mysql->trans_start();
$db_mysql->truncate($tbl);
foreach($data as $k => $v){
$data_mysql = array(
'colUserID' => $v['id'],
'colDate' => $v['check'],
'colJamMasuk' => $v['masuk'],
'colJamKeluar' => $v['keluar'],
);
if($data_mysql != null){
$db_mysql->insert($tbl, $data_mysql);
}
}
$db_mysql->trans_complete();
$db_mysql->close();
}
根据您的评论,试试这个:
SELECT USERID as id, CHEKTIME as date, MIN(CHEKTIME) as colIn, MAX(CHEKTIME) as colOut FROM timetable group by userid,date(chektime)
当使用 max 和 min 获取结果时,如果您不使用分组依据,则只会得到一个结果选项。将分组依据添加到按用户和日期分组(因此您还将为每个用户获得一个以上的日期)
你可以在这里查看at sqlfiddle
要更改日期格式,请使用:
date_format(CHEKTIME,'%y-%m-%d') as date
自从我开始以来你的问题变了很多
这是我到目前为止遇到的问题的总结 post/code。
- 你没有声明你是 mysql 连接
- 在对数据进行任何操作之前释放结果并关闭与 ms-access 的连接
- 您使用的是已弃用的 mysql 而不是 mysqli
- 你还没有测试你是否查询 return 结果(同时使用 MS-Access 作为参考或你的代码)
一步一个脚印,开始调试您 have/don 没有的东西。
解决步骤:
- 在 MS-Access 中测试查询并查看是否有结果,如果没有结果则修复
- 更改您的代码以在执行任何其他操作之前将结果打印到屏幕
- 创建另一个到 mysql 的连接(不是 MS-Access)
显示所有错误打开后右添加以下内容php
ini_set('display_errors', 1);
ini_set('log_errors', 1);
ini_set('error_log', dirname(__FILE__) . '/error_log.txt');
error_reporting(E_ALL);
$error='';
更新二:
ms-access 查询应该是:
SELECT Checktime.USERID, DateValue([CHEKTIME]) AS [Day], Min(TimeValue([CHEKTIME])) AS [In], Max(TimeValue([CHEKTIME])) AS Out FROM Checktime GROUP BY Checktime.USERID, DateValue([CHEKTIME]);
SELECT checktime.userid,
Date([chektime]) AS Day,
Min(Time(chektime)) AS CheckIn,
Max(Time(chektime)) AS CheckOut
FROM checktime
GROUP BY checktime.userid,
Date([chektime]);
我有 Microsoft Access 数据库
Table 检查时间
USERID CHEKTIME
1 2015-06-21 07:34:00
1 2015-06-21 07:50:00
1 2015-06-21 16:00:00
1 2015-06-21 16:48:00
2 2015-06-21 07:08:00
2 2015-06-21 13:48:00
2 2015-06-21 17:08:00
3 ....................
我想将数据传输到 MySQL 查询中,结果为:
userId colDate colIn colOut
1 2015-06-21 07:34:00 16:48:00
2 2015-06-21 07:08:00 17:08:00
3 .......... ........ ........
请帮帮我
这个查询让我无法进行最终测试
为什么数据无法插入到 PHPMyAdmin 中?或者 ms 访问不能声明 MIN 和 MAX 查询?这个函数和查询怎么样:
public function getPresensi(){
$dbName = $_SERVER['DOCUMENT_ROOT']."/presensi-app/assets/database/upj.mdb";
$user = "";
$password = "";
$conn = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=$dbName", $user, $password);
$qry = "SELECT USERID as id, CHECKTIME as check, min(CHECKTIME) as masuk, max(CHECKTIME) as keluar FROM CHECKINOUT group by USERID,date(CHECKTIME)";
$result = odbc_exec($conn,$qry);
while ($data[] = odbc_fetch_array($result));
odbc_free_result($result);
odbc_close($conn);
$tbl = 'tb_kehadiran';
$db_mysql = $this->load->database('default',TRUE);
$db_mysql->trans_start();
$db_mysql->truncate($tbl);
foreach($data as $k => $v){
$data_mysql = array(
'colUserID' => $v['id'],
'colDate' => $v['check'],
'colJamMasuk' => $v['masuk'],
'colJamKeluar' => $v['keluar'],
);
if($data_mysql != null){
$db_mysql->insert($tbl, $data_mysql);
}
}
$db_mysql->trans_complete();
$db_mysql->close();
}
根据您的评论,试试这个:
SELECT USERID as id, CHEKTIME as date, MIN(CHEKTIME) as colIn, MAX(CHEKTIME) as colOut FROM timetable group by userid,date(chektime)
当使用 max 和 min 获取结果时,如果您不使用分组依据,则只会得到一个结果选项。将分组依据添加到按用户和日期分组(因此您还将为每个用户获得一个以上的日期)
你可以在这里查看at sqlfiddle
要更改日期格式,请使用:
date_format(CHEKTIME,'%y-%m-%d') as date
自从我开始以来你的问题变了很多 这是我到目前为止遇到的问题的总结 post/code。
- 你没有声明你是 mysql 连接
- 在对数据进行任何操作之前释放结果并关闭与 ms-access 的连接
- 您使用的是已弃用的 mysql 而不是 mysqli
- 你还没有测试你是否查询 return 结果(同时使用 MS-Access 作为参考或你的代码)
一步一个脚印,开始调试您 have/don 没有的东西。
解决步骤:
- 在 MS-Access 中测试查询并查看是否有结果,如果没有结果则修复
- 更改您的代码以在执行任何其他操作之前将结果打印到屏幕
- 创建另一个到 mysql 的连接(不是 MS-Access)
显示所有错误打开后右添加以下内容php
ini_set('display_errors', 1);
ini_set('log_errors', 1);
ini_set('error_log', dirname(__FILE__) . '/error_log.txt');
error_reporting(E_ALL);
$error='';
更新二: ms-access 查询应该是:
SELECT Checktime.USERID, DateValue([CHEKTIME]) AS [Day], Min(TimeValue([CHEKTIME])) AS [In], Max(TimeValue([CHEKTIME])) AS Out FROM Checktime GROUP BY Checktime.USERID, DateValue([CHEKTIME]);
SELECT checktime.userid,
Date([chektime]) AS Day,
Min(Time(chektime)) AS CheckIn,
Max(Time(chektime)) AS CheckOut
FROM checktime
GROUP BY checktime.userid,
Date([chektime]);