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

MySQL+PHP—每次用户登录时存储时间戳的最佳方式,php,mysql,Php,Mysql,我需要跟踪用户的所有登录,以便他们每次登录时我都有他们登录的时间戳。最有效和最好的方法是什么 我总是通过在users表中使用一个文本字段来实现,该字段存储由字符分隔的unix时间戳。每次他们登录时,都会在末尾添加另一个时间戳 1243453458|1255476933|1263453743|1318495068| 这是一种不好的做法吗?我认为每次任何用户登录时都会有一个单独的logins表和一行,这完全是过火了,在检索此信息时会对数据库造成更大的压力 请记住,我在PHP中处理这些时间戳,并使用

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

我总是通过在users表中使用一个文本字段来实现,该字段存储由字符分隔的unix时间戳。每次他们登录时,都会在末尾添加另一个时间戳

1243453458|1255476933|1263453743|1318495068|
这是一种不好的做法吗?我认为每次任何用户登录时都会有一个单独的logins表和一行,这完全是过火了,在检索此信息时会对数据库造成更大的压力


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

在mysql中,您可以使用时间戳

看看如何配置它


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

您最好将它放在数据库中的一个单独的表中,例如:

members_logins
member_id (int) | timestamp (timestamp)
这意味着在上进行操作会更容易。

是的,这是一种可怕的存储任何东西的方法,包括时间戳,而且有更好的方法。即使是最简单的表也能提供更好的性能:

user_id (int) | last_login (timestamp)
您正在将时间戳存储为字符串。这对于存储、检索和更新来说是完全低效的;此外,您最终会遇到列限制。 对于这种目的,有大量优化的数据类型——MySQL服务器开发人员往往对高效存储数据有所了解。 对于这样一个具有固定大小行的小表,数据库命中率可以忽略不计,而对于具有可变大小字符串的表,则需要在应用程序中进行进一步处理。
换句话说,试图基于错误的假设优化应用程序——另一个表太紧张,你已经悲观了,提出了一个全面的低效解决方案。不要把事情过分复杂化;如果有疑问,请描述这两个选项并亲自查看。

这绝对是最好的方法我知道这是最好的方法,我只是不确定是否值得存储数百万行。好的,如果我想限制表只存储用户最后50次登录,最简单的方法是什么?从成员中删除\u登录,其中timestamp<从成员中选择timestamp\u登录按时间戳限制50排序,1@BadHorsie:即使对于数以万亿计的此类行,无论是读还是写,这种性能都足够。限制最后n次登录的表是没有意义的-只需将读取查询限制为50。回答得很好,谢谢。我想我对存储效率有这样的误解。