2010-07-14 59 views
9

假設我想在過去24小時內獲得10條MOST喜歡的記錄。這是我到目前爲止有:PHP MySQL查詢最近24小時內最受歡迎

$date = date("o-m-d"); 
$query = "SELECT date_created,COUNT(to),from,to FROM likes WHERE date_created LIKE '$date%' GROUP BY to ORDER BY COUNT(to) DESC LIMIT 10"; 

問題與的是,它只是變得從這一天中最喜歡的,不管多遠的那一天是。它沒有得到過去24小時內最喜歡的。

喜歡的結構: |到| date_created | ID

日期在標準ISO時間 - 例如2010-07-14T00:35:31-04:00。請直接從PHP參考:date(「c」);

+0

我的數據類型爲varchar,我現在做的... – Bharanikumar 2010-10-18 13:18:31

回答

21
WHERE date_created > DATE_SUB(NOW(), INTERVAL 24 HOUR) 
+1

+1 - 媽的,你可以輸入比我快:( – 2010-07-14 06:12:56

+0

謝謝你的誇獎 – 2010-07-14 06:14:54

+0

@戴夫裏克斯歡迎計算器:) – 2010-07-14 07:28:36

1

您應該使用日期/時間函數而不是LIKE。

WHERE date_created >= (NOW() - INTERVAL 24 HOUR) 
+0

需要>不是< – 2010-07-14 06:12:51

+0

@haim evgi是的,我注意到提交答案後的錯誤。 :) – 2010-07-14 06:13:34

+0

很好的答案,但有一個問題:我們應該在PHP中處理時間而不是mysql – 2010-07-14 09:38:09

1

所以首先關閉date_created應該被定義爲一個時間戳。如果你有一個在還有那麼DATE_MODIFIED將有on update current timestamp表DATE_MODIFIED,你可以用一個時間戳創建日期定義,這觸發更新它

CREATE TRIGGER likes_date_entered 
BEFORE INSERT ON likes 
FOR EACH ROW SET NEW.date_created = NOW() 

現在,我們有一個時間戳,你可以很容易地應用一些mysql日期功能的列。

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html

我會留下什麼做作爲一個練習的讀者,除非你說拜託要我給確切的語法。

+0

一旦您更改數據類型,喬治或哈密的條件將工作。 – umassthrower 2010-07-14 06:12:33

+0

你知道,我的答案更好:-P在PHP中計算時間戳是一個壞主意:「日期在標準的ISO時間 - 例如2010-07-14T00:35:31-04:00直接從PHP參考:日期( 「C」);」 – umassthrower 2011-07-04 02:54:10

2

如果您的date_created字段是日期時間或時間戳記字段類型,那麼您可以在where子句中使用DATE_SUB,如下所示;

 

WHERE date_created > DATE_SUB(NOW(), INTERVAL 24 HOUR)