2009-07-25 104 views
1

我有一张带日期戳E.g(1241037505)的表格。还有一个包含多个视图的列。选择热门浏览最近7天

数据标记与创建时相似。

所以我想选择过去一周内排名最高的主题。

我该怎么做?

回答

0
SELECT * FROM table WHERE Date_Created > (7 days ago value) ORDER BY Hits LIMIT 0,100 

,或者你可以使用这个(每WishCow的答案)

SELECT * FROM table WHERE Date_Created > SUBDATE(NOW(), '7 day') ORDER BY Hits LIMIT 0,100 
+0

什么是7天前的价值? – 2009-07-25 22:15:15

+0

@Ben Shelock,(现在值) - (7 * 24 * 60 * 60)。 在PHP它会是时间() - (7 * 24 * 60 * 60) – Nathan 2009-07-25 22:26:12

+0

你需要计算。通过PHP,你可以使用time() - 604800。 – 2009-07-25 22:26:30

1

您目前正在跟踪的数据是不会让你选择在上周查看顶部。它会向您显示始终浏览的顶部视图,或者上周创建的观看次数最多的内容。如果两周前创建了某些内容,但在上周您看到的内容比其他任何内容都要多,那么您无法根据所跟踪的数据确定它。我可以看到的一种做法是跟踪每个内容项在一周中的每一天获得的点击次数。

create table daily_hits { 
    cid integer, -- content id points to the table you already have 
    dotw smallint, -- 0-6 or similar 
    hits integer 
    PRIMARY KEY (cid, dotw) 
} 

每当您增加内容项目的点击次数时,您还将更新给定内容ID和星期几的daily_hits表格。您需要将当前日期/时间转换为一周中某天的功能。 MySql为此提供了DAYOFWEEK

若要在上周观看次数最多的,你可以查询这样的:

SELECT CID,SUM(点击)FROM daily_hits GROUP BY CID ORDER BY SUM(点击)DESC

您需要某些类型的计划作业会在午夜删除当前星期几,因此您不会永久累积,并且基本上会执行当前表格的匹配列上发生的相同累计。

3

试试这个:

SELECT * WHERE 
DATEDIFF(NOW(),created_date) < 7