当用户点击链接时,具有以下格式的新数据存储在名为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)
);
非常感谢任何帮助!
答案 0 :(得分:1)
您应该按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
答案 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
上的索引。 (表定义中没有一个,但对于这种类型的查询可能是个好主意。)