在聊天室,我有一个机器人,可以收集信息,例如当一个人加入或离开并填写一个数据库,我想要统计人们通常住多久以及哪些房间等。
没有反映太多我已经完成了下表:
CREATE TABLE IF NOT EXISTS `users_login_logs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`uid` int(11) NOT NULL,
`username` varchar(16) NOT NULL,
`room_id` int(11) NOT NULL DEFAULT '0',
`action` tinyint(1) NOT NULL DEFAULT '0',
`ip` int(10) unsigned NOT NULL DEFAULT '0',
`ts_register` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
进入房间时动作为0,离开时动作为1。
经过一些运行似乎这个布局似乎是我想要的最好的布局,例如计算用户输入/离开时会有点混乱并且如果例如因为w / e原因机器人会产生错误的结果不记录或遗漏任何数据。
我可以做些什么来使这个布局更加可靠,以便查询用户状态以检索用户在房间X中的小时数,每天,每周和每月?
答案 0 :(得分:1)
我会创建以下内容:
id - primary key
user_id - foreign key
room_id - foreign key
time_entered - timestamp
time_left - timestamp
(other fields as needed)
在用户的登录信息中,使用NULL
time_left
在用户的注销上创建新记录,更新记录并存储time_left
。当您的应用程序启动时,查找NULL
time_left
的任何记录 - 这表示应用程序崩溃/错过了一些退出并需要关闭它们(但是您想要处理它)。
您可以按WHERE time_left IS NULL
获取房间中的人员列表,并计算用户在线的时间非常简单。