2012-01-15 30 views
1

自動イベントカウントダウンを設定しようとしています。私がしたいことは、次回のイベントでカウントダウンにMySQLを使用することです。MySQL検索日付と時刻の間

イベントが未来の場合、コードには「予定されているイベント - カウントダウン」と表示され、イベントが発生している場合は「イベントが発生しています」と表示されます。私はこのようなテーブル構造を持つ

:だから、基本的に

CREATE TABLE jos_eventlist_events (
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, 
    catsid INT UNSIGNED, 
    dates DATE, 
    times TIME, 
    enddates DATE, 
    endtimes TIME, 
    published TINYINT(1), 
    title VARCHAR(255) 
) Engine=InnoDB; 

INSERT INTO jos_eventlist_events 
    VALUES 
(1, 6, '2012-01-15', '21:00', '2012-01-15', '22:00', 1, 'Partying'), 
(2, 6, '2012-01-15', '23:00', '2012-01-16', '01:00', 1, 'More partying') 
; 

、クエリがこれに似た何かをする必要があります。現在行われているイベントがない場合は、次の今後のイベントを取得します。イベントが発生している場合は、それを表示します。

次のクエリは、私が達成しようとしていることに対する足がかりです。

SELECT catsid,id,dates,times,endtimes,published,title 
    FROM jos_eventlist_events 
    WHERE catsid = 6 AND published = 1 
    AND dates && times >= CURDATE() && CURTIME() 
    AND dates && endtimes <= CURDATE() && CURTIME() 
    LIMIT 1 

私のサーバーは現地時間の5時間遅れています。

私はこれに本当にばかげた何かを見逃していることを知っていますが、あなたが提供できるヘルプは非常に高く評価されます。

+0

(ここでは、SQL文)適切な[サンプルコード](http://sscce.org/)は、任意のアドホックスキーマとサンプルよりも有用ですデータ形式。サンプルは 'CREATE TABLE'と' INSERT ... VALUES'を使ってください。結果はコードの出力であり、コード自体ではないので、望ましい結果をサンプルコードとして提示する必要はありません。 – outis

+0

すべての日付と時刻に同じタイムゾーンを使用する場合(テーブルの列[connection timezone](http://dev.mysql.com/doc/refman/5.1/ja/time-zone-support.html))、ローカルタイムゾーンは重要ではありません。すべての時間データは、GMT、UTC、またはサーバーのタイムゾーンを使用して処理し、ユーザーに送信するときにのみユーザーのタイムゾーンに変換する必要があります。 – outis

答えて

2

試み(私はそれをテストしていない):

SELECT catsid,id,dates,times,endtimes,published,title 
    FROM jos_eventlist_events 
    WHERE catsid = 6 AND published = 1 
    AND (CONCAT(dates, ' ', times)>= NOW() 
     OR ( CONCAT(dates, ' ', times) < NOW() 
       AND CONCAT(enddates, ' ', endtimes) >= NOW())) 
    ORDER BY CONCAT(dates, ' ', times) 
    LIMIT 1 
+0

このステートメントは、日付と時刻を別々の列にしてはならない理由を示しています。 – outis