2012-01-10 86 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()獲取日期和時間。

相關問題