経過時間を取り、正常に機能するこのクエリを取得しましたが、actual_elapsedの値が間違っていることに気付きました。actual_elapsedは、TIMEDIFF()を使用して取得したタイマーの実行時間です。log_timeは日時であり、アクション(再生、一時停止)が挿入/作成された日時です。シーケンスはintであり、各ユーザーに対して最初に発生したものを示します。statusもintで、実行されたアクションがplay(1)、pause(2)、またはstop(3)のいずれであるかを示します。
私が言ったように、私の問題はTIMEDIFF(now()、log_time)を使用してactual_elapsedの正しい値を取得することです。一時停止アクションがなければ、問題はなかったでしょう。
DBエントリの例
log_time sequence status
2012-09-27 15:31:02 1 1
2012-09-27 15:31:04 2 2 **2 +**
2012-09-27 15:40:08 3 1
2012-09-27 15:40:45 4 2 **39 +**
2012-09-27 15:40:47 5 1
2012-09-27 15:40:57 6 3 **10 =**
**49**
私のクエリでは、09分57秒が表示されますが、49秒しか取得できません。
私のサンプルクエリ。
(" select sequence_num, elapsed_time, status, TIMEDIFF(now(), log_time) as actual_elapsed from tbl");
actual_elapsedの期間を取得しようとしています。そのためには、どういうわけか休憩時間の合計時間を取り(一時停止)、経過時間と休憩時間の差を取得する必要があります。しかし、ユーザーがタイマーを複数回一時停止できるため、その部分でも問題が発生しています。
DBを設計したとき、これは十分に単純に思えました。どうすればそれほど混乱せずにこれを行うことができますか?