2013-03-24 3 views
0

Я в настоящее время имею следующие столбцы: приращенияСоздать последний столбец URL-адрес из текущего списка хитов

hit_id, visit_id, timestamp, page_url, page_next 

hit_id вверх visit_id является идентификатором визита и уникальным для каждого посетителя timestamp является Unix Отметкой хит page_url это страница, которую смотрел на page_next страница, которая смотрела на следующий

Я хотел бы, чтобы добавить новый столбец, page_last, где будет использоваться предыдущий URL страницы - я должен извлечь его из page_url и page_next. Я не знаю, почему я не создал этот столбец в первую очередь, возможно, на самом деле был небольшой надземный сайт.

Можно ли заполнить этот столбец, используя некоторые обманы MySQL? page_last всегда будет пустым при первоначальном попадании на сайт (не содержит сайт referrer).

ответ

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

+0

@MrJ. , , это должно было быть «хитами». –

+0

Спасибо за обновление - я не знаю, почему, хотя, но я продолжаю получать сообщение '# 1054 - Неизвестный столбец 'hits.visit_id' в 'where clause'', когда этот столбец и таблица определенно существуют, также сообщается, что каждый производная таблица также должна иметь псевдоним, но для этого я просто дал ей имя 'hits2' – MrJ

Смежные вопросы