2011-06-29 11 views
3

時間枠がUNIX開始からUNIX終了までの可用性であるかどうかを調べようとしています。私のようなデータを持っている:私は与えられた開始と終了を持っているクエリを実行しようとすると、この遅いが取られているかどうかをチェックしていますMySQLで利用可能な時間枠を見つける

id start  end 
1 1309383000 1309390200 
2 1305115200 1305129600 
3 1305374400 1305403200 

。ただし、別のエントリが終了するとstartが開始されます。私はさまざまな方法で試してみましたが、正しく動作させることはできません。どんな助けもありがとうございます。

私はPHPを使用してクエリを呼び出しています。しかし、私は可能な限り純粋なMySQLでそれをしたいと思います。

+0

基本的に重複時間を探していますか? BETWEEN/NOT BETWEEN SQLオペレーター –

+0

私はこれらのテストで多くのことを行いました。私は本当に近いですが、うまく動作しませんでした。 – mikelbring

+1

あなたの「より近い」クエリを投稿しようとしました –

答えて

1
select if(max(end) >= $end, max(end), $end) - 
     if(min(start) <= $start, min(start), $start) - 
     if(sum(end - start) is null, 0, sum(end - start)) as FreeTime 
where end > $start and start < $end 
+0

WHEREには何が入りますか? – mikelbring

+0

それはちょっとうまくいくんだけど、奇妙な数字がたくさんあるし、どうしたらいいのか分からない。時には0の束、たまには0、そして0はそれを意味するが、0の束はそうでないことを意味する。時には私はそれが取られないことを意味するものは何も得られません。何か案が? – mikelbring

+0

それはanwserとして1つの行を持つ必要があります、あなたはより多くを得るのですか?私の最後の修正を見てください。ヌルまたはセロが「自由時間なし」他の数字は時間枠内のフリー秒数です。あなたのテスト(とデータセット) –

0
SELECT count(*) 
FROM timeslots 
WHERE ($your_start NOT BETWEEEN start AND end) AND 
    ($your_end NOT BETWEEN start and end) 

これが0より大きい場合、要求されたタイムスロットは少なくとも部分的に取得されます。

+0

これはいつも何かを返すように思われました – mikelbring

+0

はい、それはあなたがカウントをしているので、そうです。常に数値を返します。その番号を取得する必要があります。 0の場合は、タイムスロットが使用可能です。それ以外の場合は使用中です。今日は脳死だ。論理を逆にしていると思う。 「間」ではなく「ちょうど」をやってみてください。 0 =利用可能、0 =利用不可能になります。 –

+0

それはやっていないようです。私は1時間が始まる前に2時間スロットを置き、0を返します。そして、1つが終わるとそれを置き、1を返します。 – mikelbring

0

startTimeに1単位を加え、endTimeから1単位を減算してから、節を検索するためにbetween節を使用します。

+0

1単位= 1秒? – mikelbring

関連する問題