Php 用户';s现场的可能性

Php 用户';s现场的可能性,php,mysql,database-design,Php,Mysql,Database Design,我想在网站上建立一个系统,允许用户根据自己的评分做一些事情。例如,我有评级值X的规则: 3天内发布1篇文章 一天内发表10条评论 两天20票 对于额定值Y,规则可能如下所示: 一天内发布3篇文章 一天50条评论 一天30票 每天晚上我都会重新计算用户的评分,所以我知道每个用户都能做些什么。 可能性不会在每次评级重新计算时求和或重置 更重要的一点是,管理员可以在任何时候填充具体用户的可能性 理想的数据库(MySQL)结构是什么 我可以计算具体用户做了什么: SELECT COUNT(*)

我想在网站上建立一个系统,允许用户根据自己的评分做一些事情。例如,我有评级值X的规则:

  • 3天内发布1篇文章
  • 一天内发表10条评论
  • 两天20票
对于额定值Y,规则可能如下所示:

  • 一天内发布3篇文章
  • 一天50条评论
  • 一天30票
每天晚上我都会重新计算用户的评分,所以我知道每个用户都能做些什么。 可能性不会在每次评级重新计算时求和或重置

更重要的一点是,管理员可以在任何时候填充具体用户的可能性

理想的数据库(MySQL)结构是什么

我可以计算具体用户做了什么:

SELECT COUNT(*) FROM posts WHERE UserID=XXX AND DateOfPost >= 'YYY'
SELECT COUNT(*) FROM comments WHERE UserID=XXX AND CommentOfPost >= 'YYY'

但是在这种情况下,我如何进行管理员填充呢?

在用户表中,有三列名为
remainingPosts
remainingComments
remainingvowers
?当用户执行特定操作时,您将减少列数,这样管理员就可以始终“重新填充”这些列,甚至超过原始限制

===


另一个选项是在这些列中存储权限的到期日,这样您就可以重置权限,只需将某个列的到期日设置为前一天。然后,您可以使用查询来获取用户的剩余帖子/评论/投票数。

如果我理解正确,您的用户可以发布1篇博客,并评论10次。现在他/她已经发表了5次评论并发布了一个博客。你想让管理员点击一个按钮,现在用户可以再次发布博客和评论10次

这可能有点像黑客,但你可以计算被重置/忽略的操作,并从当前操作中减去这些操作

e、 g:用户有1个博客和5条评论。管理员按“重置”,然后保存这些值。 现在,当用户发布另一个博客时,如果您检查是否允许,您将获得

SELECT COUNT(*) FROM posts WHERE UserID=XXX AND DateOfPost >= 'YYY'
你做了这样的事

SELECT changes FROM adminTable WHERE UserID=XXX AND  type = 'post'

如果count-changes(计数更改)正常,则设置完成。

我建议将这两个问题完全分开:

  • 向用户启用功能/可能性的过程
  • 用户特征的数据模型
例如,可以有一个简单的多对多表来表示用户功能:

user_features(
   user_id
  ,feature_id
  ,source      (admin|earned)
  ,primary key(user_id, feature_id)
);
这使得管理员可以非常轻松地禁用/启用部分或所有功能集

您的夜间作业将查询相关表,并通过在此表中插入/删除来授予/撤销功能

如果您采用这种方法,您实际上可以根据评级或特定操作提供功能

“3天3个职位”这样的规则可以这样执行:

when a user posts, check if the previous post was made within 24 hours.
if yes then
   increment counter by 1
   record current timestamp

   if counter = 3 then
      grant feature to user
else 
   reset counter to 1 
   record current timestamp
SELECT action, IF(SUM(count) < MIN(limits), 1, 0) as can_do_action FROM log LEFT JOIN rules ON rules.action = log.action WHERE userId = XXX AND rating_min <= RATING AND rating_max >= RATING AND ignore = 0 AND DATEDIFF(date, NOW()) <= days

在某些由用户id键入的表中,您需要两列(post\u count:int,last\u post:date)。

我将记录每个用户每天的操作数,并使用该表进行比较

此表将包含以下字段:

  • 日期:行动发生的日期
  • 计数:当天采取的行动数
  • 用户ID:谁执行了此操作
  • 行动:哪个行动发布/评论/投票/
  • 忽略:布尔值,如果已设置,则管理员已重置值

检查规则:从日志中选择SUM(count),其中userId=XXX,action=YYY,ignore=0,DATEDIFF(date,NOW())+1-这是个不错的问题。对不起,我不能帮你-P“管理员可以履行具体用户的责任”是什么意思?这意味着,如果用户已经使用了一些自己的可能性(例如,博文和5条评论),并且他的全部可能性是“博文:1,评论:10”,管理员可以使,这个用户再次拥有全部可能性“博文:1,评论:10”.这种可能性会不断给出,或者像任何其他可能性一样,会在午夜重新计算?如果不是-那么如果用户将收集点(或他们在您的网站收集的任何东西),应该得到更大的可能性-管理员指定的应该被重写吗?不是经常。可能性取决于用户的评分。每晚重新计算评级。每天晚上我都知道,每个用户都有哪些可能性。第二天晚上的可能性可能不同(小/大)。管理员可以充分利用用户对该知识的可能。对不起,我的英语:)如果用户已经使用了自己的一些可能性,管理员可以在任何时候做(每天可以做很多次,每小时…),该用户再次拥有完全的可能性(他在前一天晚上收到),这是最简单的解决方案。但如果我有规则,例如“3天3篇文章”,如果用户只使用了其中的一部分,我如何知道何时以及如何再次“补充”这些计数器?似乎是可以的,但请您进一步解释。adminTable中有什么,以及如何以及何时在此表中插入/更新/删除数据?第二天会发生什么,或者管理员再次按下“重置”按钮?我没有详细了解这个想法,但从远处看,这似乎是一个很酷的解决方案。“admintable”只是一个表的随机名称,它可以保存要从总数中“减去”的值。当管理员按下“重置”按钮时,它们会被更新,并且每晚清空。谢谢!使用忽略字段是一个非常好且简单的解决方案!