想铁血网www.tiexue.net那样,他每一张帖都能统计出访问IP数,到底怎样实现的?

解决方案 »

  1.   

    帖子id  | ... | ip访问数量 |  曾访问的ip地址
    -------------------------------------------------------------------
    0       | ... | 3          |  192.168.0.1,192.168.0.2,192.168.0.3,
    帖子表加两个字段,ip访问数量,曾访问的ip地址.当读取这个帖子时,将曾访问的ip地址字段取出,用explode函数将字符串转化为数组,用$_SERVER['REMOTE_ADDR']与曾访问的ip地址这个字段的循环比较下,如果没有相同的:
    "UPDATE [帖子表] SET [ip访问数量] = [ip访问数量]+1 AND [曾访问的ip地址] = [曾访问的ip地址]".$_SERVER['REMOTE_ADDR']."',' WHERE [帖子id] = [帖子id]";
    如果有相同的不做处理.
      

  2.   

    记录浏览者ip
    然后使用select distinc...
      

  3.   

    如果你想要非常准确的独立访问量,那你的数据存储量就太大了。
    我们是这样实现的。
    一个字段是counter,另一个字段是记录最后一个访问ip。
    当一个人访问的时候如果ip和最后的ip相同,就不做处理,不同则counter++,并更新最后的ip
    这样,一个帖子所占的数据空间就很少了。
    但结果是和真是的数据有差距。
    如果要非常精确的,只能用一个ip一个记录,或者一个记录加一个非常长的字段。
      

  4.   

    的确很麻烦.
    每次读帖都要对比IP,很耗资源哦.
    "
    一个字段是counter,另一个字段是记录最后一个访问ip。
    当一个人访问的时候如果ip和最后的ip相同,就不做处理,不同则counter++,并更新最后的ip"
    这样可能不行,太不准了.
      

  5.   

    不能要求完美,性能和功能不能兼得的。
    一个字段存储所有的ip,那每次访问这个页面的时候都得先select,切割,对比,update
    操作比较多,速度不敢恭维。
    如果一个ip一个记录,则打开的时候先看有没有相同ip,这个时候如果索引设置正确则能很快,判断是否有记录,没有则insert,但表里的数据量庞大的时候(一个帖子访问量几千甚至上万),insert一次就需要改写一次索引,而这个索引也会变得越来越大,插入动作越来越慢。
    我们是用了非准确的方法,对照最后一个ip,因为没有必要太准确的数字,换来的则是性能上的大量提高。
      

  6.   

    那就加一个字段,访问的id数量.
    向客户端写入cookie,cookie记录下帖子的id,当读取这个帖子的时候,读取客户端的cookie,首先看看$_COOKIE['access']是否为空,不为空再看看是否对应当前的帖子id,也对应的话就不做处理,否则,就setcookie('access',$帖子id);当然你可以给cookie设定失效时间,比如10个小时左右.一般来说,很少有客户端会频繁更换IP.
      

  7.   

    用51la似乎没法将结果及时反馈回来.记录ip那个方法有点投机了,其实应该再建个表,单独存储帖子的访问过的ip地址,然后再比较的时候就不用切割了,不过链接查询也会造成效率降低.用cookie应该是最好的选择了.