[英]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)
);
任何帮助将非常感激!
您应该按url
和title
对点击进行分组,对其进行计数,然后使用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.