繁体   English   中英

MySQL + PHP - 每次用户登录时存储时间戳的最佳方式

[英]MySQL + PHP - Best way to store timestamp every time user logs in

我需要跟踪用户的所有登录信息,以便每次登录时我都有他们这样做的时间戳。 这样做的最有效和最好的方法是什么?

我总是通过在users表中有一个文本字段来存储它,该文本字段存储由字符分隔的unix时间戳。 每次登录时,都会将另一个时间戳添加到结尾。

1243453458|1255476933|1263453743|1318495068|

这是一个不好的方式吗? 每当用户登录时,我都会想到一个单独的登录表,每次登录都是一种过度杀伤,并且在检索此信息时会对数据库造成更大的压力。

请记住,我在PHP中处理这些时间戳,并使用数据中的jQuery创建图形。

是的,这一种存储任何东西的可怕方式,包括时间戳,还有更好的方法可以做到这一点。 即使是最简单的表也会给你带来更好的性能:

user_id (int) | last_login (timestamp)
  • 您将时间戳存储为字符串。 这对于存储,检索和更新来说是完全没有效率的; 加上你最终会遇到一个列限制。
  • 对于这种目的,存在大量优化的数据类型 - MySQL服务器开发人员倾向于知道有关存储数据的一两件事。
  • 对于具有固定大小行的这种小型表,数据库命中率可以忽略不计 - 而不是具有可变大小字符串的表,这需要在应用程序中进一步处理。

换句话说,通过尝试优化应用程序(基于不正确的假设 - “另一个表太过紧张”),你已经对它进行了低估,提出了一个全面的低效解决方案。 不要过分复杂化; 如果有疑问,请勾选两个选项并亲自看看。

您可能最好将它放入数据库中的单独表中,例如:

members_logins
member_id (int) | timestamp (timestamp)

这意味着进行操作会更容易。

在mysql中,您可以使用TIMESTAMP

看看这里了解如何配置它

编辑:你的管道划分方法是不好的。 您可以拥有一个存储各种用户事件的事务表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM