用户存在的表设计?

时间:2011-09-03 19:59:59

标签: mysql

在聊天室,我有一个机器人,可以收集信息,例如当一个人加入或离开并填写一个数据库,我想要统计人们通常住多久以及哪些房间等。

没有反映太多我已经完成了下表:

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中的小时数,每天,每周和每月?

1 个答案:

答案 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获取房间中的人员列表,并计算用户在线的时间非常简单。