繁体   English   中英

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

[英]Retrieve from MySQL “most clicked items in the past 6 hours”?

用户单击链接时,具有以下格式的新数据将存储在名为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

如何在过去6个小时内按降序显示(以PHP表示)被点击的前5个标题? 鉴于到目前为止已记录的数据(假设NOW是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)
);

任何帮助将非常感激!

您应该按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

我建议以下内容:

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 可以被使用。 (表定义中没有一个,但是对于这种类型的查询可能是个好主意。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM