2011-02-05 15 views
2

私は、私のクライアントの1人がいたずらなフリーランサーによって書かれたちょっとした乱雑なコードを修正するという仕事を与えられました....私は書き直しに大いに熱心ではありませんそれはある時間使用されていたように、今は別の機能を求めたときに問題を引き起こしただけです。データベースはプログラムのさまざまな部分で利用されており、この機能はシステム全体のほんの一部に過ぎません。PHPのmysqlクエリの時間をintフィールドから差し引く

本質的に、スクリプトの目的は、仮想オフィス内のすべての会議を管理することです。 「現在の」会議を表示するには、ページが必要です。これはオリジナルのクエリでした。

時刻は、intフィールドのmysqlテーブルに24時間値として格納されます。たとえば、午後3時43分は1543として単純に保存されます。 新しい要件は、会議がセットアップ時間の余裕を持つことができるようにすることでした。 フリーランサー...「独創的な」解決策は

AND START_TIME<='$CURRENT_TIME' 

にこの行をテーブルに別のint型のフィールドを追加し、変更することでした。..

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

それは文句を言わない、いくつかの会議のためにそれを動作する可能性がありながら、例えば、1405から20分のセットアップ余裕時間で始まる会議は、1385になります。

私は残りを一人で残して、ちょうどAPPEAR_START_TIMEフィールドを引くことができる巧妙なソリューションを探していますクォートの$ START_TIME列エリしかし、分。

アイデア?

+3

これらの列をすべて実際のSTARTとENDの日時列に置き換える小さなスクリプトを作成することはできませんか?その後、すべてのハッキングなしでクエリを書くことができます。 –

+0

私は理解していない、彼らは新しい機能を求め、その過程でデータベースがうまく設計されていないことを発見した?それは非常に不規則です。風刺はさておき、人々はたいていこの「技術的負債」と呼んでいます。最初はただの修正であったものを修正するためにはるかに多くの作業が必要です。 –

+0

私は同意しますが、これは正確にエレガントではなく、私たちの時間を固定する価値はないと思います。それが起こると、私たちはv2をすでに正しく設計されたデータベースで作業しています! – Alex

答えて

0

私が正しく理解している場合、「HHMM」という形式の2つの整数値があります.HHは時間で、MMは分です。 2つの時間値の差を計算したいとします。

value/100でMMを、value % 100でMMを得ることができます。その後、時間と分のデルタを別々に計算することができます。

時間デルタ(< MM-現れる開始MMは、起動した場合HHは、分デルタによって引き起こさデルタ+おそらく1時間値)である:

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

分デルタです:

(START_TIME % 100 - APPEAR_START_TIME % 100) % 60 

次に、デルタのHHとMMの部分を連結することができます:

HOURS_DELTA * 100 + MINUTES_DELTA 
+0

おかげで、私は正しい方法を考えていないことを知っていました。確かながら* 100 <= '$のCURRENT_TIME' ない - – Alex

+0

は、私はあなたがこの AND(APPEAR_START_TIME)/ 60(((START_TIME/100)* 60)+(START_TIME%の100))を行うためにここに書いたものを使用しましたエレガントな、それは仕事をする! – Alex

0

まず、感謝Kel :)

私はこの1つは、より簡単ですと思う:

(((START_TIME/100)* 60 +(START_TIME%の100) - APPEAR_START_TIME)/ 60)* 100 +(((START_TIME/100)* 60 + (START_TIME%100) - APPEAR_START_TIME%6​​0)

+0

私はそれを明確にするために "それほど"感謝しています。 – Alex

関連する問題