关于人数统计有人说是用application的概念。不过因为要涉及到每个分版块每个版块的人数,所以呢。我还是没有用这样的办法。这样办法也不能完全的统计出来。
为此我写了个存储过程
其中Online_ID 代表了用户的ID,我用户ID是同用户名分开的啦。这个ID也是标志用户唯一的一个值。所以我作为传入参数进入onlineid ,
其中onlinename 表示了用户名,
其中对于游客,我让游客的ID统一为0,游客名统一为“游客”。
我的总体思想就是基本在每个页面都调用这样的存储过程。
让每个版块进入就开始统计人数。在存储过程中比较如果是会员的话,那么他的ID就大于0。查找表看看是否存在这样的用户。如果存在那么更新她的ONLINE时间,以及版块的ID。如果不存在那么新加一个。如果是游客,那么它的ID为0,直接插入进表单。
同时在一开始的时候比较一下,当前时间同存储的时候如果在20分钟内用户无活动,那么从在线表里面删除用户。
当然这个时间可以自己设定,我为了让看上去用户人多点,所以呵呵。当然这样统计还不完善,没有精确的统计。不过也满足了日常的需求。估计你还有更好的,讨论一下阿坝。
(
@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