2017-08-18 1 views
-1

PHPMyAdminを使用してMySQLデータベースをセットアップしようとしています。私はそれに長く入る前に、私はそれを設定して質問するアドバイスが必要です。私はこのようなテーブルを設定しました。タスクを記録するためにmysqlデータベースを設定する

id: primary ket 
time_in: date 
time_out: date 
task: varchar (128) 
business: varchar (128) 

私が必要とするのは、各タスクにどのくらいの時間を費やしているのかを追跡することです。これは良い方法ですか、それとも良い方法がありますか?

これが正しければ、時間を照会する方法を理解しようとしています。これは私が質問として思い付いたものですが、私が望むものからは遠いです。

SELECT `Task`,`Business`, (SELECT `Time-Out` - `Time-In`) as `total time` FROM `Sheet` 

合計時間をより読みやすい形式に変換する方法はありますか?

+1

はおそらく、日付の代わりに日時を使用します。 – Ricktron3000

答えて

0

差を合計秒数に変換するには、TIMEDIFF(end_time、start_time)およびTIME_TO_SEC(time)を使用することをお勧めします。秒を数学的に任意の形式に変換できます。各タスクの時間のためにそう

select ID 
     ,task 
     ,business 
     ,time_to_sec(timediff(time_out, time_in)) as duration 
from sheet 

タスクやビジネスで集計するには:あなたは日中の時間を追跡している場合を除き、私はTIMEまたはDATETIMEを使用してお勧めします

select task 
     ,business 
     ,sum(time_to_sec(timediff(time_out,time_in))) as total_time 
from sheet 
group by task 
     ,business 
+0

ありがとう非常に役立ちます。 – Husbandman

+0

@Husbandmanの場合、あなたの質問に対するあなたの好みの解決方法であれば、それらの回答を参考にして回答を受け入れるべきです。 – Degan

0

time_inおよびtime_out列の場合

個人的には、現在の活動を追跡できるようにするために、おそらくtime_outをNULLにすることができます(開始したものの、まだ完了していないもの)。

タイムスタンプを減算するためにサブ選択を使用する必要はありませんが、インラインでこれら2つの列を減算することもできます(SELECTキーワードをドロップするだけです)。あなたはがNULL可能time_out(またはTime-Out)を作るのですか場合は、あなたがいることを取る必要があります

SELECT `Task`, `Business`, TIMEDIFF(`Time-Out`, `Time-In`) as `total time` FROM `Sheet` 

SELECT '12:00:00' - '10:45:00'; 
-> 2 

SELECT TIMEDIFF('12:00:00', '10:45:00'); 
-> '01:15:00' 

クエリになるだろう:書式設定のために、あなたはTIMEDIFF機能を使用することができますあなたの質問には:

SELECT TIMEDIFF(NULL, '10:45:00'); 
-> NULL 

このように進行中のタスクはtotal timeはNULLです。あなたはすでに取り組んできたどのくらいかを知りたい場合は、IFNULL機能でそれをラップし、その場合には、現在の時刻を取得できます。

SELECT TIMEDIFF(IFNULL(`Time-Out`, NOW()), `Time-In`); 
-> '01:15:00' if `Time-Out` is 12:00:00 and `Time-In` is 10:45:00 
-> '02:05:13' if `Time-Out` is NULL and it's currently 12:50:13 (server time) 
+0

ありがとう非常に役立ちます。 – Husbandman

関連する問題