0

我不习惯使用应该像用户警告那样每次间隔递减的值,例如持续存在的警告可以在用户被禁止之前30 days达到最大值3 warns

我想设计一个这样的用户表,但现在我应该处理它,我发现每 30 天递减一次值没有用:

table_user
- username
- email
- warnings (integer)
- last_warn (timestamp data type)

我应该使用一些 php 计时器吗?

是否存在关于用户警告的任何标准技术?

4

3 回答 3

2

您可以创建另一个表

User_warnings:
    user_id
    warn_timestamp

每当用户被警告时,您首先删除所有超过 30 天的条目,然后检查是否仍然存在两个或多个警告。然后禁止该用户。

如果您想要有关所有警告的历史记录,请不要删除旧警告,而只需查询过去 30 天内的警告。

这样您就不必每天递减,而只需检查何时出现另一个警告。

于 2010-03-03T18:16:43.877 回答
1

通过打破来自用户的警告来规范化您的表格,例如:

Table: Users
UserID  int auto generate PK
UserName
UserEmail

Table: UserWarnings
UserID
WarningDate

您现在可以编写查询以确定过去 30 天内是否有 3 个警告。当“警告”发生时运行此查询,如果返回一行,则禁止该用户。

查询看起来像这样:

SELECT
    COUNT(*)
    FROM UserWarnings
    WHERE UserID=...your user id... AND WarningDate>=...current date time...
    HAVING COUNT(*)>2

通过制作警告表,您可以保留完整的警告历史记录,这可能很有用。

于 2010-03-03T18:16:23.063 回答
1

我相信,用户警告系统确实没有标准设计。“三击出局”是一种典型的方法,但并不总是最好的。例如,如果我N在我的网站上有规则,我们会说K这些规则是严重的违规行为,那么我会说那些不那么严重的违规行为给予三击。但也许严重的罪行是自动禁令或两次罢工?

如果我必须设置这样的东西,我会创建一个如下所示的表:

user_warnings:
- warning_id
- user_id
- created_at
- offense_level

然后可能会设置一个查询,您可以在其中找到任何用户,这些用户在过去T几天的总犯罪级别大于或等于可禁止的犯罪级别的值。如果他们的总犯罪水平超过推荐值,则禁止该用户。我会说将进攻级别设置为 5 级左右,并且有分层的进攻级别。

不过,在我看来,永远不要删除过去的罪行。你永远不知道什么时候记住以前发生的事情很重要,最好把它记录下来。只需确保此查询仅检查小于 30 天的日期(或您要设置的警告的天数)。

于 2010-03-03T18:20:58.953 回答