9

假设我想在过去 24 小时内获得 10 条点赞最多的记录。这是我到目前为止所拥有的:

$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 小时内,它并没有得到最喜欢的人。

喜欢的结构:来自 | 到 | 日期创建 | ID

日期采用标准 ISO 时间 - 例如 2010-07-14T00:35:31-04:00。直接来自 PHP 参考:date("c");

4

4 回答 4

19
WHERE date_created > DATE_SUB( NOW(), INTERVAL 24 HOUR)
于 2010-07-14T06:09:32.020 回答
2

如果您的 date_created 字段是日期时间或时间戳字段类型,则可以在 where 子句中使用 DATE_SUB ,如下所示;


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

于 2010-07-14T06:12:09.290 回答
1

您应该使用日期/时间函数,而不是 LIKE。

WHERE date_created >= (NOW() - INTERVAL 24 HOUR)
于 2010-07-14T06:10:04.910 回答
1

所以首先关闭 date_created 应该定义为带有 on 的时间戳default current timestamp。如果您在表中也有 date_modified ,那么 date_modified 也会有on update current timestamp,您可以将创建的日期定义为时间戳,并使用此触发器对其进行更新

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

我将把该做什么作为练习留给读者,除非你说非常拜托并希望我给出确切的语法。

于 2010-07-14T06:10:16.783 回答