Php 在同一url中标识多个访问的Cron作业?
使用PHP cron作业,如何输出访问同一页面超过2次的用户 这是mySQL表Php 在同一url中标识多个访问的Cron作业?,php,mysql,cron,Php,Mysql,Cron,使用PHP cron作业,如何输出访问同一页面超过2次的用户 这是mySQL表 id - user - page - timestamp 340 - 1 - page1 - 2009-05-18 22:11:11 339 - 1 - page1 - 2009-05-18 22:10:01 337 - 1 - page1 - 2009-05-18 22:06:00 336 - 2 - page3 - 2009-05-18 22:00:00 335 - 2 - page3 - 2009-05-18
id - user - page - timestamp
340 - 1 - page1 - 2009-05-18 22:11:11
339 - 1 - page1 - 2009-05-18 22:10:01
337 - 1 - page1 - 2009-05-18 22:06:00
336 - 2 - page3 - 2009-05-18 22:00:00
335 - 2 - page3 - 2009-05-18 21:56:00
使用
groupby
和count
select
user,page, count(*) as total
from table_name
group by user,page
having total > 2
更新
如何使用这些结果更新另一个表?用户-页面-时间
除了在重复密钥更新时使用外,还可以使用将插入从中选择
考虑以下几点
mysql> select * from pages ;
+------+------+
| user | page |
+------+------+
| 1 | p1 |
| 1 | p1 |
| 1 | p1 |
| 2 | p1 |
| 2 | p1 |
| 2 | p2 |
| 3 | p2 |
| 3 | p2 |
| 3 | p2 |
+------+------+
create table page_view_log
(
user int,
page varchar(100),
times int,
primary key(user,page)
);
select * from page_view_log ;
请注意,这里的日志表具有复合键(用户,页面)
现在,下面的查询将完成这项工作
insert into page_view_log(user,page,times)
select
user,page,total from (
select user,page, count(*) as total
from pages
group by user,page
having total > 2
)x
on duplicate key update times = total
mysql> select * from page_view_log ;
+------+------+-------+
| user | page | times |
+------+------+-------+
| 1 | p1 | 3 |
| 3 | p2 | 3 |
+------+------+-------+
2 rows in set (0.00 sec)
现在,让我们在第一个表中为user-1
insert into pages values (1,'p1'),(2,'p2'),(2,'p2');
现在,如果我们再次运行上述查询,它将更新现有数据的总数并插入新值,使用复合键(用户,页面)
非常感谢。所以现在我们发现页面访问超过两次的用户。如何使用这些结果更新另一个表?用户-页面-时间更新还是插入?第二个表是否已经有了用户
和页面
,因此它只会更新?第二个表将有用户-页面-时间列
。这就像“如果不存在,请插入,否则请更新”。非常感谢!因此,果汁就在这个块中插入页面查看日志(用户、页面、时间)…
对吗?是的。。在这里,我正在执行插入到select from
中,并使用复合键检查其是否重复,如果是,则只需更新一个新条目。
mysql> select * from page_view_log ;
+------+------+-------+
| user | page | times |
+------+------+-------+
| 1 | p1 | 4 |
| 2 | p2 | 3 |
| 3 | p2 | 3 |
+------+------+-------+