0

我有一个 MySQL 表,用于记录登录用户对网站每个页面的访问。它有一个用户栏,一个是访问页面的名称,一个是访问的时间/日期。

我想使用 MySQL 查询生成一个表,以以下格式汇总该表中的信息,即我希望该表主要按用户上次访问的日期排序,然后为他们拥有的每个页面排列一行访问过(每个访问过的页面一行(我用三页来说明,但我真的希望列出所有页面),即使他们多次访问过该页面),按最后一次访问此页面的时间/日期排序,并有一列表示用户对页面的总访问次数:

在此处输入图像描述

我已经尝试使用 GROUP by 和 DISTINCT 进行各种查询,但我并没有很接近,所以很高兴能得到一些帮助来完成这项工作。

4

2 回答 2

0

试试这个。您可能需要对此进行调整,因为我无法完全复制您的场景

Select * from
(
select 

    page, 
    visitdate
    userid,
    @rank:=case when @tmpuserid<>userid then 1
    else
      IFNULL(@rank,0)+1 
    end as rank,
    @tmpuserid:=userid as tmpuserid

from pages
order by visitdate
) p
Where  p.rank <=3
于 2012-08-19T14:40:25.400 回答
0

可能有更好的方法,但我最终使用两个查询解决了这个问题。第一个为每个名称返回一个唯一的行:

SELECT *,COUNT(DISTINCT Page) AS count_page FROM visits GROUP by Name ORDER BY MAX(Date) DESC";

然后我使用 count_page 为每个单元格设置一个行跨度,其中名称为:

echo "<tr><td ROWSPAN=\"".$row['count_page']."\">";

然后,在每个名称的循环中,我运行了第二个查询,该查询为每个名称的每个唯一页面返回一行:

"SELECT Page, unix_timestamp(NOW()) - unix_timestamp(MAX(Date)) as time_page, COUNT(Page) as Count FROM visits WHERE Name='".$row['Name']."' GROUP by Page ORDER BY MAX(Date) DESC"

然后我可以使用$row['Page'],$row['time_page']$row['Count']返回我想要的附加信息。

于 2012-08-19T20:57:43.303 回答