使用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
现在我想编写一个查询以使用 php 从CHECKINOUT
表中的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 中查找日期时间函数并将 date
和 time
函数替换为 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访问数据库中获取最大和最小时间的主要内容,如果未能解决你的问题,请参考以下文章
从 PHP 传递日期以从 Microsoft Access 获取数据