2011-02-05 86 views
2

我已经被赋予修复一个非常混乱的代码,我们的客户之一由一个狡猾的自由职业者写的任务....我不是非常热衷于重写整个事情,因为它已经被使用了一段时间,它的唯一真正的问题是现在当他们要求另一个功能时。数据库被程序的各种其他部分利用,这个功能只是整个系统的一小部分。在php中删除时间从mysql字段中查询mysql的查询

本质上,该脚本的目的是管理虚拟办公室中的所有会议。 他们需要一个页面来显示“当前”会议。这是原始查询。

$CURRENT_TIME=date("Gi"); 


mysql_connect(localhost,$USERNAME,$PASSWORD); 
@mysql_select_db($DATABASE) or die("Unable to select database"); 
$query="SELECT * FROM ROOM_1 WHERE 
EVENT_ROOM LIKE'%$URLROOMNAME%' 
AND EVENT_YEAR='$CURRENT_YEAR' 
AND EVENT_MONTH='$CURRENT_MONTH' 
AND EVENT_DATE='$CURRENT_DATE' 
AND START_TIME<='$CURRENT_TIME' 
AND END_TIME>='$CURRENT_TIME' "; 
$result=mysql_query($query); 
$num=mysql_numrows($result); 
mysql_close(); 

时间存储在mysql表中作为24小时值在int字段中。例如3:43 pm简单地存储为1543. 新的要求是为了能够获得设置时间限制的会议。 的自由职业者......“巧妙”的解决方案是另一种的int字段添加到表并更改该行

AND START_TIME<='$CURRENT_TIME' 

到..

AND (START_TIME-APPEAR_START_TIME)<='$CURRENT_TIME' 

现在,虽然它可以用于一些会议,它不会工作对于其他人来说,例如,开始于1405的会议以20分钟的设置允许时间将导致1385 ...

因此,我正在寻找一个聪明的解决方案,允许我独自离开休息,只需从中减去APPEAR_START_TIME字段曲目中的$ START_TIME列但只有几分钟。

任何想法?

+3

难道你不能只编写一个脚本来用真正的START和END日期时间列替换所有这些列吗?然后,您可以编写查询,而不需要所有的黑客。 – 2011-02-05 05:55:42

+0

我不明白,他们要求一个新的功能,并在过程中发现数据库设计不佳?这非常不规范。抛开讽刺,人们通常称之为“技术债务”:必须做更多的工作来修改原本只是一个快速修复的东西。 – 2011-02-05 06:16:33

+0

虽然我同意,但这并不完美,不值得花时间修复它。正如它发生的那样,我们正在使用一个设计合理的数据库来处理v2! – Alex 2011-02-05 06:36:27

回答

0

如果我理解正确,你有两个“HHMM”形式的整数值,其中HH是小时,MM是分钟;你想计算两个时间值之间的差异。

你可以得到HH value/100和MM value % 100。然后,您可以分别计算小时和分钟的增量。

小时delta是(HH值Δ+可能引起分钟增量为1小时,如果MM-启动< MM-出现启动):

(START_TIME/100 - APPEAR_START_TIME/100) + (START_TIME % 100 - APPEAR_START_TIME % 100)/60 

分钟delta是:

(START_TIME % 100 - APPEAR_START_TIME % 100) % 60 

然后,您可以连接三角洲HH和MM部分:

HOURS_DELTA * 100 + MINUTES_DELTA 
0

首先感谢凯尔:)

我觉得这个是比较容易:

(((START_TIME/100)* 60 +(START_TIME%100) - APPEAR_START_TIME)/ 60)* 100 +(((START_TIME/100)* 60 + (START_TIME%100) - APPEAR_START_TIME)%60)