2011-09-06 122 views
0

我有一个数据库表处理用户登录总数和另一个表处理个人登录会话。我应该将这些表格分开吗?还是应该继续并合并它们?数据库结构 - 两张桌子还是一张桌子?

users_logins 
    users_id 
    successful_logins(total) 
    last_online 

users_logins_sessions 
    users_id 
    session_id 
    ip_address 
    user_agent 
    last_activity(time-stamp) 

回答

1

您可能会丢失user_logins,因为我认为last_online和last_activity包含相同的值。

然而,您将不得不查询user_logins_sessions表以获取给定用户成功登录的总数。

SELECT COUNT(user_id) FROM user_login_sessions WHERE user_id = ? 
+0

我喜欢这个想法。 –

+0

请参阅@trevors for last_online的SQL答案 – Bruce

1

这真的取决于你,但我理解它(假设在这里)会话被清除?通常在我的应用程序中,会话过期并创建一个新的会话,但我不确定在users_logins_sessions中如何管理会话,因为您不会提供更多信息,它可以以任何方式工作。

如果您的'会话'表永不删除条目,或者如果会话过期/被间隔删除,则保持原样。

我还假设users_id用于其他地方,如果你让他们分开。

+0

感谢您的意见。我想跟踪会话,并以某种方式能够强制登录用户,如果我将其status_id更改为2(非活动),这意味着他们进行的下一次点击将会终止当前会话并将其发送到登录屏幕。 –

1

如果您只有users_logins_sessions表,则可以轻松查询successful_logins和last_online。

SELECT COUNT(1) AS successful_logins 
    FROM users_logins_sessions 
    WHERE users_id = <user_id>; 

SELECT MAX(last_activity) AS last_online 
    FROM users_logins_sessions 
    WHERE users_id = <user_id>; 
+0

您也可以从单个查询中检索这两个聚合,不是吗? –

相关问题