2015-05-25 34 views
0

使用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 21:56:00 

回答

2

这可以用group bycount

select 
user,page, count(*) as total 
from table_name 
group by user,page 
having total > 2 

UPDATE

轻松完成我怎么能与这些结果更新另一个表?用户 - 第 - 次

这可利用另外insert into select from进行使用on duplicate key update

考虑以下

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 ; 

请注意,这里的日志表具有复合键(user,page)

现在以下查询将完成作业

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'); 

添加更多的页面现在,如果我们再次运行上面的查询,将更新全部现有数据和插入新值,重复使用复合考虑键(user,page)

mysql> select * from page_view_log ; 
+------+------+-------+ 
| user | page | times | 
+------+------+-------+ 
| 1 | p1 |  4 | 
| 2 | p2 |  3 | 
| 3 | p2 |  3 | 
+------+------+-------+ 
+0

谢谢。所以现在我们发现有两次页面访问的用户。我如何用这些结果更新另一个表?用户 - 页面 - 次 – poulokopri

+0

更新或插入?第二张桌子是否已经拥有'user'和'page'以便它只会更新? –

+0

第二个表格将有'user - page - times'列。它会像“插入,如果不存在,否则更新”。 – poulokopri