2013-11-26 72 views
0

我有一個事件table.and我今天使用顯示事件。
SELECT * FROM `special_banner_tbl` WHERE `SPLBANNER_pubsdate` = current_date

如果今天沒有事件,它必須顯示更接近當前日期的未來日記錄。
如果表格像..
------------------
future_date
------------------
30- 11-2013
30-11-2013
02-12-2013
03-12-2013
03-12-2013
----------------------
它將顯示下一個最近的日期30-11-2013記錄..喜歡。

SELECT * FROM `special_banner_tbl` WHERE `SPLBANNER_pubsdate` = nest_nearest_date_records得到最近的下一個日期記錄在mysql

只有一個最近的未來日期的記錄沒有任何限制。像
--------------- --------------
事件                 未來日期
---- ----------- ----------------
30th-events     30-11-2013
30th-events     30-11-2013
------------------------------

+0

傢伙感謝您的回答,但我需要31-11-2-13只記錄哪些是比今天更接近。我不是什麼限制,以及日期02-12-2013和未來的日期.. –

+0

我只需要下一個事件日期記錄只有沒有任何限制..請幫助.. –

+1

我真的很擔心知道你的數據庫列接受日期爲'31'天'November'。 ***'31-11-2013' ***。我的數據庫用'ERROR 1292(22007)' –

回答

0

您需要SPLBANNER_pubsdate> current_date作爲將來的日期和順序SPLBANNER_pubsdate ASC,所以如果在當前日期沒有發現任何事件,它就會失敗l有未來的事件,如果發現然後當前事件是第一個列出的

SELECT * FROM `special_banner_tbl` WHERE `SPLBANNER_pubsdate` = current_date 
OR `SPLBANNER_pubsdate` > current_date ORDER BY `SPLBANNER_pubsdate` ASC 
LIMIT 0 , 30 
+0

如果只存在5個當前日期記錄,其餘的是未來日期,則會發生什麼 –

+0

當前日期的5個事件將首先列出,並且25個未來事件也會在那裏,但在當前事件發生後 –

+0

OP僅當沒有當前時間列出未來日期日期記錄可用 –

0

其實你要做的是使用今天和未來的區別。那麼你將不得不通過升序差異來訂購你的數據。

希望我幫了忙!

+0

不,我不會訂購任何記錄。我只需要未來的日期事件記錄.. –

0

試試這個:

SELECT 
    * 
FROM 
    `special_banner_tbl` 
ORDER BY 
    ABS(DATEDIFF(NOW(), `SPLBANNER_pubsdate`)) 
LIMIT 10 
2

無論如何,我會寫這種情況下,兩個單獨的查詢,但是這也能正常工作:

SELECT 
    * 
FROM special_banner_tbl 
WHERE SPLBANNER_pubsdate = CURRENT_DATE 

UNION ALL 
SELECT 
    * 
FROM special_banner_tbl 
WHERE 
    (SELECT COUNT(*) 
    FROM special_banner_tbl 
    WHERE SPLBANNER_pubsdate=CURRENT_DATE) = 0 
    AND 
    SPLBANNER_pubsdate = (
     SELECT MIN(SPLBANNER_pubsdate) 
     FROM special_banner_tbl 
     WHERE SPLBANNER_pubsdate > CURRENT_DATE 
     ORDER BY SPLBANNER_pubsdate 
     LIMIT 1 
    ) 
+0

嘿喬治,非常感謝。它的工作真棒..感謝很多.. –

+1

+1 @GeorgeGarchagudashvili。好想法。 –

+0

非常感謝@Ravinder。 – 2013-11-29 07:51:50

0
SELECT * FROM `jsproduct_company` 
WHERE future_date > NOW() 
LIMIT 1; 

您可以找到上面的查詢確切的下一個日期記錄。

0
SELECT * 
FROM `special_banner_tbl` 
WHERE `SPLBANNER_pubsdate` >= CURDATE() 
ORDERBY `SPLBANNER_pubsdate` asc 
LIMIT 1 

如果你的領域SPLBANNER_pubsdate將包含完整的日期時間值(而不是日期值),你就必須改變where子句位,隔離日期:

SELECT * 
FROM `special_banner_tbl` 
WHERE DATE(`SPLBANNER_pubsdate`) >= CURDATE() 
ORDERBY `SPLBANNER_pubsdate` asc 
LIMIT 1 
相關問題