2011-02-05 92 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)