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)

当使用 maxmin 获取结果时,如果您不使用分组依据,则只会得到一个结果选项。将分组依据添加到按用户和日期分组(因此您还将为每个用户获得一个以上的日期)

你可以在这里查看at sqlfiddle

要更改日期格式,请使用:

date_format(CHEKTIME,'%y-%m-%d') as date

自从我开始以来你的问题变了很多 这是我到目前为止遇到的问题的总结 post/code。

  1. 你没有声明你是 mysql 连接
  2. 在对数据进行任何操作之前释放结果并关闭与 ms-access 的连接
  3. 您使用的是已弃用的 mysql 而不是 mysqli
  4. 你还没有测试你是否查询 return 结果(同时使用 MS-Access 作为参考或你的代码)

一步一个脚印,开始调试您 have/don 没有的东西。

解决步骤:

  1. 在 MS-Access 中测试查询并查看是否有结果,如果没有结果则修复
  2. 更改您的代码以在执行任何其他操作之前将结果打印到屏幕
  3. 创建另一个到 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]);