2010-07-14 94 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)