2013-03-24 70 views
0
當前列表中的最後一個網址列

目前,我有以下欄目:創建一個從命中

hit_id, visit_id, timestamp, page_url, page_next 

hit_id增量向上 visit_id是訪問的ID和獨特每個訪問者的 timestamp是Unix時間戳命中 page_url正在看着 page_next的頁面是被看着旁邊

我想添加一個新列的頁面,page_last,上一頁的網址將進入 - 我應該能夠從page_urlpage_next中提取。我不知道爲什麼我一開始沒有創建這個專欄,可能真的是一個輕微的現場。

無論如何填寫本專欄使用一些MySQL的欺騙? page_last在網站上的最初命中時將始終爲空(不包含推薦網站)。

回答

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物化視圖,因此它實際上創建一個包含更新的必要信息的「臨時表」。

+0

感謝以上,但更新部分是否正確?我問,因爲我看到派生表「h」出現在查詢中,但沒有在第三塊中聲明。另外,最內部的部分'h2.visit_id = hits.visit_id'是不是看起來完全相同的表?但是,'url_prev'聽起來好多了:o) – MrJ 2013-03-24 23:17:32

+0

@MrJ。 。 。本應該是'命中'。 – 2013-03-24 23:27:57

+0

感謝您的更新 - 但我不知道爲什麼,但是當該列和表格絕對存在時,我不斷收到'#1054 - 'where子句'中未知列'hits.visit_id' - 也被告知每個派生表也必須有一個別名,但爲此我只給它一個名字'hits2' – MrJ 2013-03-25 07:49:55