【问题标题】:MySQL Query Database Attendance get in/outMySQL查询数据库考勤进出
【发布时间】:2015-12-21 01:59:54
【问题描述】:

我有数据库 Microsoft Access

CHECKTIME

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();


}

【问题讨论】:

  • 您应该多解释一下,选择特定时间作为输入或输出的要求是什么?不管现在是什么时间,总是第一个和最后一个吗? IE。早上有人忘记签到,退房的时候不小心签了2次,导致db里有2次。
  • 别忘了添加您已经尝试过的内容。
  • 数据库不是数据签入或签出的解释。但数据会记录每个人在任何时候签到。如果这个人只有一个签到,Colin 和 colout 会是一样的。例如:userID, colDate, Colin, colout ->1, 2015-08-21, 08:00:00, 08:00:00
  • SELECT USERID 作为 id,CHECKTIME 作为日期,MIN(CHECKTIME) 作为 colIn,MAX(CHECKTIME) 作为 colOut FROM CHCKINOUT
  • 您的 php 代码存在多个问题。首先在 phpmyadmin 中测试查询并评论是否是您想要的结果,然后我们可以处理 php

标签: php mysql ms-access migrate


【解决方案1】:

根据您的评论,试试这个:

SELECT USERID as id, CHEKTIME as date, MIN(CHEKTIME) as colIn, MAX(CHEKTIME) as colOut FROM timetable group by userid,date(chektime)

当使用 ma​​xmin 获得结果时,如果您不使用分组依据选项,您只会获得一个结果。将分组依据添加到按用户和日期分组(这样您还可以获得多个日期,对于每个用户)

你可以在这里查看at sqlfiddle

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

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

自从我开始后,你的问题发生了很大变化 这是迄今为止我在您的帖子/代码中看到的问题的总结。

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

一步一步地开始调试你有/没有的东西。

解决步骤:

  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='';

更新 2: 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]);

【讨论】:

  • 在我的 PHPMyAdmin 中数据仍然为 NULL
  • 我不认为你在你的数据库管理员 (PHPMyadmin) 中尝试过,但是你测试了你的代码,如果你的代码有其他问题,那么你不会得到结果,在 phpmyadmin (不是你的 php 代码)中尝试,看看你是否得到结果。正如您在 sqlfiddle 中看到的那样,它可以正常工作
  • 因为你的反应不够快,我现在就去睡觉。我会看看你早上有没有修好任何东西
  • 我使用 php codeigniter $db_mysql = $this->load->database('default',TRUE);用于连接mysql数据库
  • 不能使用按日期分组(检查时间)。感谢您的回复,如果您有空请帮助我
【解决方案2】:
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]); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多