2012-01-10 61 views
1

我有一个快速和尽快的问题。在两者之间进行选择不适用于MySQL?

SELECT `deals`.* 
    FROM `deals` 
    WHERE 
    `is_featured` = 1 AND 
    `status` = 'active' AND 
    CURDATE() BETWEEN start_date AND DATE_ADD(end_date, INTERVAL 1 DAY) 
    ORDER BY `end_date` DESC 
    LIMIT 1 

这是正确的吗?

start_date是“2012-01-11 00:00:00”而end_date是“2012-01-11 23:59:59”。

这就是我想要显示:

我想说明的dealoffer,它是当前日期时间之间,如果is_featured为1和status是“积极的”。

CURDATE()给我只日期,而不是时间,这是什么问题?我怎样才能在MySql中获取当前的日期时间?)。

它应该只选择一项交易,并且该交易应该是距离当前日期时间最近的结束日期。

+0

是否有未来日期的交易?如果没有,也许你可以找到最大日期的那个呢?或者如果有未来的日期,你可以寻找比当前日期更短的最大日期吗? – DOK 2012-01-10 23:39:20

+0

这应该工作。你会得到什么错误?顺便说一句,NOW()会为你返回一个当前的日期时间。 – 2012-01-10 23:40:03

+0

什么数据类型是start_date和end_date? – 2012-01-10 23:41:10

回答

2

这是你的原始查询

SELECT `deals`.* FROM `deals` 
WHERE `is_featured` = 1 
AND `status` = 'active' 
AND CURDATE() BETWEEN start_date AND DATE_ADD(end_date, INTERVAL 1 DAY) 
ORDER BY `end_date` DESC 
LIMIT 1; 

更换之间,这

SELECT `deals`.* FROM `deals` 
WHERE `is_featured` = 1 
AND `status` = 'active' 
AND start_date >= (CURDATE() + INTERVAL 0 SECOND) 
AND start_date <= (end_date + INTERVAL 1 DAY) 
ORDER BY `end_date` DESC 
LIMIT 1; 

,并添加该指数

ALTER TABLE deals ADD INDEX (is_featured,status,start_date,end_date); 
0

您可以使用CURTIME()函数来检索当前时间。

1

使用now()获取日期和时间。

相关问题