0

現在、次の列があります。

hit_id, visit_id, timestamp, page_url, page_next

hit_id上向きの増分 visit_idは訪問のIDであり、各訪問者に固有 timestampです。ヒットのUNIXタイムスタンプ page_urlは、表示されているページで page_nextあり、次に表示されたページです。

前のページのURLが入る新しい列を追加したいと思います-これをとpage_lastから抽出できるはずです。そもそもなぜこの列を作成しなかったのかわかりませんが、おそらく実際には少しオーバーサイトです。page_urlpage_next

MySQLのトリックを使用してこの列を埋める方法はありますか?page_lastWebサイトでの最初のヒットでは常に空になります(リファラーWebサイトは含まれません)。

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 に答える