Обогатить данные журнала сайта с помощью идентификатора пользователя в SQL - PullRequest
0 голосов
/ 14 мая 2011

Предположим, что у нас есть типичный журнал сеанса с веб-сайта с файлами cookie и идентификатором пользователя (в случае, если он / она предоставил учетные данные):

cookie      id  timestamp
af312b452c  .   31-03-11 1:44 PM
af312b452c  .   31-03-11 1:46 PM
af312b452c  .   31-03-11 1:48 PM
af312b452c  .   31-03-11 1:51 PM
af312b452c  .   31-03-11 1:53 PM
af312b452c  .   31-03-11 1:56 PM
af312b452c  1   31-03-11 1:58 PM
af312b452c  1   31-03-11 2:01 PM

31-03-11 13:58 - пользователь вошел в систему-в, поэтому с тех пор мы отслеживаем его / ее активность наряду с user_id.

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

cookie      id  timestamp
af312b452c  1   31-03-11 1:44 PM
af312b452c  1   31-03-11 1:46 PM
af312b452c  1   31-03-11 1:48 PM
af312b452c  1   31-03-11 1:51 PM
af312b452c  1   31-03-11 1:53 PM
af312b452c  1   31-03-11 1:56 PM
af312b452c  1   31-03-11 1:58 PM
af312b452c  1   31-03-11 1:58 PM

Как лучше всего это сделать в SQL?

Примечания:

  • во всей таблице много строк,
  • пользователей могут иметь несколько файлов cookie.
  • определенное значение файла cookie могло использоваться для другого пользователя в прошлом

Спасибо всем заранее.

1 Ответ

0 голосов
/ 15 мая 2011

Я бы начал с создания функции, которая получала бы мне самый последний идентификатор входа cookie, указанный в этом cookie, и отметку времени, когда вы регистрировали этот cookie (psuedocode на моей голове, извинения, если что-то не так):1001 *

CREATE FUNCTION getFutureLogin(in_cookie VARCHAR, in_timestamp DATETIME) RETURNS INT AS
BEGIN
  DECLARE logged_in_id IN

  SELECT logged_in_id = TOP 1 id
  FROM T_NAME
  WHERE cookie = in_cookie
  AND timestamp > in_timestamp
  AND id IS NOT NULL
  ORDER BY timestamp ASC

  RETURN logged_in_id
END

Оттуда это простое обновление, которое вы, вероятно, когда-нибудь запланируете на работу.

UPDATE T_NAME SET id = getFutureLogin(cookie, timestamp) WHERE id IS NULL

Возможно, это не самый простой или быстрый способ, но он будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...