2012-01-15 114 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

正確[示例代碼](http://sscce.org/)(在這裏,SQL語句)比任何特設模式和樣品更有用數據格式。請使用'CREATE TABLE'和'INSERT ... VALUES'作爲樣本。所需的結果不需要作爲示例代碼呈現,因爲結果是代碼的輸出,而不是代碼本身。 – outis 2012-01-16 01:02:22

+0

如果使用相同的時區,每日期和時間(表列,[連接時區(http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html)),您的當地時區並不重要。所有時間數據應使用GMT,UTC或服務器時區進行處理,並僅在發送給用戶時轉換爲用戶的時區。 – outis 2012-01-16 01:19:49

回答

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 2012-03-25 22:21:04