您的位置:首页 > 其它

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

2006-08-21 02:18 267 查看
关于人数统计有人说是用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐