从MySQL“过去6小时内点击次数最多的项目”中检索?

时间:2014-12-07 20:37:57

标签: php mysql sql select

当用户点击链接时,具有以下格式的新数据存储在名为tracking_table的MySQL_DB表中:

id    url                 title             clicktime 
1     http://1.com       title 1        2014-12-07 21:33:53
2     http://2.com       title 2        2014-12-07 21:34:03
3     http://1.com       title 1        2014-12-07 19:30:00
4     http://3.com       title 3        2014-12-07 18:38:47
5     http://1.com       title 1        2014-12-07 22:23:54
6     http://2.com       title 2        2014-12-07 20:17:20
7     http://7.com       title 7        2014-12-07 10:20:12
8     http://1.com       title 1        2014-12-07 21:38:03

我如何以降序显示(在PHP中)过去6小时内点击的前5个标题?鉴于迄今为止记录的数据(假设现在是2014-12- 07 22.24.00),我的结果应该是这样的:

#     url             no. of clicks    title
1     http://1.com        4            title 1
2     http://2.com        2            title 2
3     http://3.com        1            title 3

我使用此命令创建了数据库:

CREATE TABLE `tracking_table` (
  id int(11) unsigned NOT NULL AUTO_INCREMENT,
  url varchar(255) DEFAULT NULL,
  title varchar(255) DEFAULT NULL,
  clicktime timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (id)
);

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

您应该按urltitle对点击进行分组,对其进行计数,然后使用limit子句仅检索前5位:

SELECT   url, title, COUNT(*) 
FROM     tracking_table
WHERE    DATE_DIFF (NOW(), clicktime) * 24 <= 6
GROUP BY url, title
ORDER BY 3 DESC
LIMIT    5

答案 1 :(得分:0)

我建议如下:

select tt.title, count(*)
from tracking_table tt
where clicktime >= date_sub(now(), interval - 6 hours)
group by title
order by count(*) desc
limit 5;

这类似于Mueinik的答案,有一个重要的例外:where条款。首先,这个计算应该有效,第二个clicktime不是函数的参数。后者意味着可以使用clicktime 上的索引。 (表定义中没有一个,但对于这种类型的查询可能是个好主意。)