我觉得这个名字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 实现了视图,因此它实际上创建了一个“临时表”,其中包含更新所需的信息。