在满足session_id, ip, user_agent
以下条件的情况下,给定形式为的网站访问数据,以及可选的时间戳记,请按照以下条件进行操作,如何最好地将会话归类为唯一身份访问者?
session_id
:是给每个新访客的ID。它不会过期,但是如果用户不接受cookie /清除cookie /更改浏览器/更改设备,则将不再识别他
IP
可以在不同的用户之间共享(想像一个免费的Wi-Fi咖啡馆,或者您的ISP重新分配IP),他们通常会至少拥有2个家庭和工作场所。
User_agent
是浏览器+操作系统版本,可区分设备。例如,用户可能同时使用手机和笔记本电脑,但不太可能使用Windows + Apple笔记本电脑。同一会话ID不可能有多个用户代理。
数据可能看起来像这里的小提琴:http ://sqlfiddle.com/#!2/ c4de40/1
当然,我们在谈论假设,但这是在尽可能接近现实。例如,如果我们在有限的时间内遇到具有不同session_id的相同ip和useragent,则可以合理地假设它是同一用户,但有一些例外情况。
编辑:解决问题的语言是反讽的,它主要是关于逻辑而不是实现。伪代码很好。
编辑:由于小提琴的缓慢性质,您可以选择读取/运行mysql:
select session_id, floor(rand()*256*256*256*256) as ip_num , floor(rand()*1000) as user_agent_id
from
(select 1+a.nr+10*b.nr as session_id, ceil(rand()*3) as nr
from
(select 1 as nr union all select 2 union all select 3 union all select 4 union all select 5
union all select 6 union all select 7 union all select 8 union all select 9 union all select 0)a
join
(select 1 as nr union all select 2 union all select 3 union all select 4 union all select 5
union all select 6 union all select 7 union all select 8 union all select 9 union all select 0)b
order by 1
)d
inner join
(select 1 as nr union all select 2 union all select 3 union all select 4 union all select 5
union all select 6 union all select 7 union all select 8 union all select 9 )e
on d.nr>=e.nr