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