MySQL在日期和时间之间搜索

时间:2012-01-15 23:59:28

标签: mysql database mysqli

我正在尝试设置自动事件倒计时。我想做的是使用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个小时。

我知道我错过了一些非常愚蠢的东西,但是你能提供的任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分: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