统计在线人数还有会员数的一个存储过程

关于人数统计有人说是用application的概念。不过因为要涉及到每个分版块每个版块的人数,所以呢。我还是没有用这样的办法。这样办法也不能完全的统计出来。

为此我写了个存储过程 

其中Online_ID 代表了用户的ID,我用户ID是同用户名分开的啦。这个ID也是标志用户唯一的一个值。所以我作为传入参数进入onlineid ,

 其中onlinename 表示了用户名,

其中对于游客,我让游客的ID统一为0,游客名统一为“游客”。

我的总体思想就是基本在每个页面都调用这样的存储过程。

让每个版块进入就开始统计人数。在存储过程中比较如果是会员的话,那么他的ID就大于0。查找表看看是否存在这样的用户。如果存在那么更新她的ONLINE时间,以及版块的ID。如果不存在那么新加一个。如果是游客,那么它的ID为0,直接插入进表单。

同时在一开始的时候比较一下,当前时间同存储的时候如果在20分钟内用户无活动,那么从在线表里面删除用户。

当然这个时间可以自己设定,我为了让看上去用户人多点,所以呵呵。当然这样统计还不完善,没有精确的统计。不过也满足了日常的需求。估计你还有更好的,讨论一下阿坝。

 

CREATE PROCEDURE Pr_UpdateOnline
(
@onlineid int
,
@onlinename varchar(
200 ) ,
@onlineip varchar(
100 ) ,
@onlinegroupid int
,
@onlineboardid int
,
@onlinetime datetime
)
AS

DELETE FROM BBS_Online
WHERE 
    DATEDIFF(MINUTE
, GETDATE() , Online_Time)> 20

DECLARE @isuser  as int

SET @isuser
=
(
SELECT COUNT(*)  FROM BBS_Online
    WHERE Online_ID
= @onlineid AND Online_ID> 0
)

IF @isuser<
= 0
BEGIN
INSERT INTO 
    BBS_Online
    (
    Online_ID
,
    Online_Name
,
    Online_Ip
,
    Online_GroupID
,
    Online_BoardID
,
    Online_Time
    )
    VALUES
    (
    @onlineid
,
    @onlinename
,
    @onlineip
,
    @onlinegroupid
,
    @onlineboardid
,
    @onlinetime
    )
END

IF @isuser>
0
BEGIN 
    UPDATE BBS_Online
    SET 
    Online_Time
= @onlinetime ,
    Online_BoardID
= @onlineboardid
    WHERE Online_ID
= @onlineid
END
GO
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值