0

我目前有以下列:

hit_id, visit_id, timestamp, page_url, page_next

hit_id向上递增 visit_id是访问的 ID,每个访问者 timestamp都是唯一的,是命中的 unix 时间戳 page_url是正在查看 page_next的页面是下一个查看的页面

我想添加一个新列,page_last前一页 URL 将进入该列 - 我应该能够从page_url和中提取它page_next。我不知道为什么我一开始没有创建这个专栏,可能真的有点过分了。

反正有没有使用一些 MySQL 技巧来填充这个专栏?page_last在网站的初始点击中始终为空(不包含引荐网站)。

4

1 回答 1

0

我觉得这个名字page_last模棱两可(它是指上一页吗?还是访问时的最后一页?)。建议你改成page_prev.

假设没有人在一次访问中多次访问同一页面,则以下内容接近于填写:

select h.*, hprev.page_url as page_prev
from hits h left outer join
     hits hprev
     on hprev.page_next = h.page_url and hprev.visit_id = h.visit_id

如果这不是真的,那么您需要最新的。您可以使用相关子查询来获得它:

select h.*,
       (select h2.page_url
        from hits h2
        where h2.visit_id = h.visit_id and h2.page_next = h.page_url and
              h2.timestamp < h.timestamp
        order by timestamp desc
        limit 1
       ) as page_prev
from hits h

在 MySQL 中进行更新有点棘手,因为您无法在更新中直接使用更新后的表。但是,以下技巧应该有效:

update hits
    set page_prev = (select page_url
                     from (select page_url
                           from hits h2
                           where h2.visit_id = hits.visit_id and
                                 h2.page_next = hits.page_url and
                                 h2.timestamp < hits.timestamp
                           order by timestamp desc
                           limit 1
                          ) h3
                    )

这个技巧之所以奏效,是因为 MySQL 实现了视图,因此它实际上创建了一个“临时表”,其中包含更新所需的信息。

于 2013-03-24T21:59:30.060 回答