使用php从ms访问数据库中获取最大和最小时间

Posted

技术标签:

【中文标题】使用php从ms访问数据库中获取最大和最小时间【英文标题】:Fetch maximum and minimum time from ms access db using php 【发布时间】:2013-10-08 04:28:45 【问题描述】:

我正在尝试使用在 Microsoft Access 数据库中创建的现有数据库。该数据库有一个名为CHECKINOUT的表,其中存储了每个用户的指纹检查时间的数据,顺序为-

USERID         CHECKTIME        CHECKTYPE            VERIFYCODE
=======================================================
3         10/03/2013 7:03:32 PM   I             1   
3         10/03/2013 11:45:49 AM  I             1
3         10/03/2013 8:40:20 AM   I             1
3         11/03/2013 7:13:33 PM   I             1
3         11/03/2013 11:24:36 PM  I             1
3         11/03/2013 9:04:42 AM  I              1
4         10/03/2013 7:02:46 PM   I             1
4         10/03/2013 6:43:10 PM   I             1
4         10/03/2013 10:46:41 AM  I             1
4         10/03/2013 8:47:04 AM   I             1
4         11/03/2013 7:23:33 PM   I             1
4         11/03/2013 11:20:36 PM  I             1
4         11/03/2013 8:28:42 AM  I              1

现在,让我手动选择最短和最长时间。

10 March UserID(3) Maximum Time: 10/03/2013 7:03:32 PM
10 March UserID(3) Minimum Time: 10/03/2013 8:40:20 AM
11 March UserID(3) Maximum Time: 11/03/2013 7:13:33 PM
11 March UserID(3) Minimum Time: 11/03/2013 9:04:42 AM


10 March UserID(4) Maximum Time: 10/03/2013 7:02:46 PM
10 March UserID(4) Minimum Time: 10/03/2013 8:47:04 AM
11 March UserID(4) Maximum Time: 11/03/2013 11:20:36 PM
11 March UserID(4) Minimum Time: 11/03/2013 8:28:42 AM

现在我想编写一个查询以使用 phpCHECKINOUT 表中的CHECKTIME 列中选择个人(例如,其中 UserID = 3)的最小和最大时间。报告应如下所示-

USERID      |   DAY        |    INTIME(MINIMUM TIME)     | OUTTIME(MAXIMUM TIME)
=================================================================================
   3        | 10/03/2013   |        8:40:20 AM           |     7:03:32 PM
   3        | 11/03/2013   |        9:04:42 AM           |     7:13:33 PM

如何使用来自 MS Access(.mdb) 数据库的 PHP 实现上述查询?我认为可以使用子查询。但是,我找不到任何查询浏览器,例如 HeidiSQL、mysql 查询浏览器、MySQL 终端或 Navicat for MS Access,我应该在哪里编写和测试我的查询。

【问题讨论】:

请检查我在描述中创建的最后一个输出表。我想像那天那样明智地选择.. 是的...你是对的...我的描述有误...让我修改 【参考方案1】:

我对访问不太了解,但一般查询应该是这样的:

SELECT
  date(checktime) Day,
  time(min(checktime)) MinTime,
  time(max(checktime)) MaxTime
FROM t
WHERE userid = 3
GROUP BY Day

我用 MySQL 创建了一个fiddle,但是把它变成 MsAccess 应该很简单。忽略奇怪的日期格式......这是 SQLFiddle 正在改变的东西,但 Date()Time() 应该只返回日期时间的适当部分,而不是将年份设置为 1970 年之类的东西。

【讨论】:

Warning: odbc_exec(): SQL error: [Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'DATE(CHECKTIME) Day'., SQL state 37000 in SQLExecDirect in 根据我对 MySQL 的了解,我尝试了相同的查询。我很欣赏你的回答。 正如我在答案中提到的,查询在 MySQL 中运行。您必须将其转换为 MsAccess(在 MsAccess 中查找日期时间函数并将 datetime 函数替换为 MsAccess 期望的函数......这只是一个语法问题:)【参考方案2】:

看起来像 anviz db ;) 也许它会对某人有所帮助.. 来自 att2003.mdb v_record 请求的 MS Access 请求:

SELECT 
First(V_Record.Userid) AS [USER ID], 
First(V_Record.Name) AS Employer,
DateValue([CheckTime]) AS Date, Min(TimeValue([CheckTime])) AS CheckIN,
Max(TimeValue([CheckTime])) AS CheckOUT, 
Format(Max(TimeValue([CheckTime]))-Min(TimeValue([CheckTime])),"hh:nn") AS [Work Time],
First(V_Record.Sensorid) AS [Device ID], 
First(V_Record.ClientName) AS [Device name]
FROM V_Record
GROUP BY DateValue([V_Record.CheckTime]), V_Record.Userid
ORDER BY DateValue([V_Record.CheckTime]), First(V_Record.Name);

【讨论】:

以上是关于使用php从ms访问数据库中获取最大和最小时间的主要内容,如果未能解决你的问题,请参考以下文章

ms 查询 man min date 月份查询

Spark SQL 从数据源动态获取最大值和最小值

从 PHP 传递日期以从 Microsoft Access 获取数据

从 ms 访问中获取表数

如何在线获取静态 MS-Access DB 并使用 PHP 连接到它?

所有从 php 中的 ms access 数据库中检索数据