这可以用group by
和count
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 |
+------+------+-------+
谢谢。所以现在我们发现有两次页面访问的用户。我如何用这些结果更新另一个表?用户 - 页面 - 次 – poulokopri
更新或插入?第二张桌子是否已经拥有'user'和'page'以便它只会更新? –
第二个表格将有'user - page - times'列。它会像“插入,如果不存在,否则更新”。 – poulokopri