我不习惯使用像用户警告那样每过一段时间就递减的值,例如,warn可以在用户被禁止之前保持30 days的最大值3 warns
我曾想过要设计一个这样的用户表,但现在我应该在上面工作了,我发现每30天递减一次值是没有用的:
table_user
- username
- email
- warnings (integer)
- last_warn (timestamp data type)我应该使用一些php计时器吗?
在用户警告方面有什么标准的技术吗?
发布于 2010-03-04 02:16:23
通过打破来自用户的警告来规范化您的表,如下所示:
Table: Users
UserID int auto generate PK
UserName
UserEmail
Table: UserWarnings
UserID
WarningDate现在,您可以编写一个查询来确定在过去30天内是否有三个警告。在出现“警告”时运行此查询,如果返回一行,则禁止该用户。
查询将如下所示:
SELECT
COUNT(*)
FROM UserWarnings
WHERE UserID=...your user id... AND WarningDate>=...current date time...
HAVING COUNT(*)>2通过创建警告表,您可以保留完整的警告历史记录,这可能会很有用。
发布于 2010-03-04 02:16:44
您可以创建另一个表
User_warnings:
user_id
warn_timestamp每当用户收到警告时,您首先删除超过30天的所有条目,然后检查是否仍然存在两个或更多警告。那就禁止这个用户。
如果您想要所有警告的历史记录,请不要删除旧警告,只查询最近30天内的警告。
通过这种方式,您不必每天都减少,而只需在出现另一个警告时进行检查。
发布于 2010-03-04 02:20:59
我认为,对于用户警告系统,确实没有标准的设计。“三振出局”是一种典型的方法,但并不总是最好的。例如,如果我在我的网站上有N规则,我们会说这些规则中的K是严重的违规行为,那么不那么严重的违规行为我会说是三次打击。但是,也许严重的违规行为是自动禁令或给两次打击?
如果我必须设置这样的东西,我会创建一个如下所示的表:
user_warnings:
- warning_id
- user_id
- created_at
- offense_level然后可以设置一个查询,您可以在其中找到在过去T天内具有大于或等于bannable违规级别值的总和违规级别的任何用户。如果他们的总攻击级别超过了推荐值,则禁止该用户使用。我想说的是将攻击级别设置为5左右,并具有分级的攻击级别。
不过,在我看来,永远不要删除过去的违规行为。你永远不会知道什么时候记住以前发生的事情很重要,而且记录下来也是很好的。只需确保此查询只检查不到30天的日期(或者您想要设置的警告可以是多少天)。
https://stackoverflow.com/questions/2373759
复制相似问题