有這樣一個需求,我們需要獲得某個時間段內(nèi)所有數(shù)據(jù)記錄,比如最近一個月內(nèi)的新聞,然后再在這個數(shù)據(jù)集合中進行排序,看哪個新聞的點擊率最高。現(xiàn)在問題是,如何獲得那個時間段。MySQL已經(jīng)有些函數(shù)可以幫助我們,先看看這些函數(shù)吧。 TO_DAYS(date) 函數(shù) 給定
有這樣一個需求,我們需要獲得某個時間段內(nèi)所有數(shù)據(jù)記錄,比如最近一個月內(nèi)的新聞,然后再在這個數(shù)據(jù)集合中進行排序,看哪個新聞的點擊率最高。現(xiàn)在問題是,如何獲得那個時間段。MySQL已經(jīng)有些函數(shù)可以幫助我們,先看看這些函數(shù)吧。
給定一個日期date,返回一個天數(shù)(從年份0開始的天數(shù))。
比如下面的例子:
mysql> SELECT TO_DAYS('2009-08-07'); +-----------------------+ | TO_DAYS('2009-08-07') | +-----------------------+ | 733991 | +-----------------------+ 1 row in set
TO_DAYS() 不用于陽歷出現(xiàn)(1582)前的值,原因是當(dāng)日歷改變時,遺失的日期不會被考慮在內(nèi)。
請記住,MySQL“日期和時間類型”中的規(guī)則將日期中的二位數(shù)年份值轉(zhuǎn)化為四位。例如,‘2010-08-07′和 ‘10-08-07′ 被視為同樣的日期:
mysql> SELECT TO_DAYS('2009-08-07'),TO_DAYS('09-08-07'); +-----------------------+---------------------+ | TO_DAYS('2009-08-07') | TO_DAYS('09-08-07') | +-----------------------+---------------------+ | 733991 | 733991 | +-----------------------+---------------------+ 1 row in set
對于1582年之前的日期(或許在其它地區(qū)為下一年),該函數(shù)的結(jié)果實不可靠的。
NOW() 函數(shù)返回當(dāng)前的日期和時間。
mysql> select (now()); +---------------------+ | (now()) | +---------------------+ | 2010-08-26 21:18:44 | +---------------------+ 1 row in set
to_days(current_date)也可以實現(xiàn)上面的功能。
mysql> select to_days(current_date); +-----------------------+ | to_days(current_date) | +-----------------------+ | 734375 | +-----------------------+ 1 row in set
現(xiàn)在我們可以得出問題的答案了:
select * from news where to_days(now())-to_days(newsdate) < 30 order by view desc limit 0, 10
可以獲得一個月內(nèi)瀏覽數(shù)最高的十條記錄。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com