繁体   English   中英

用户在网站上的可能性

[英]User's possibilities on site

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

  • 1天内发帖1天
  • 1天内有10条评论
  • 2天内20票

对于评级值Y,规则可能如下:

  • 3天后发布1天
  • 1天内有50条评论
  • 1天30票

每天晚上我都会重新计算用户的评分,所以我知道每个用户能做什么。 可能性不会对每个评级的重新计算进行求和或重置。

更重要的是,管理员可以随时填写具体用户的可能性。

什么是最佳数据库(MySQL)结构?

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

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

但是在这种情况下如何管理填充可能性呢?

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

该表将包含以下字段:

  • 日期 :行动发生的日期
  • count :当天采取的行动次数
  • userId :谁做了这个动作
  • 行动 :哪个动作发表/评论/投票/ ......
  • ignore :boolean,如果设置了,则admin重置值

检查规则: SELECT SUM(count)FROM log WHERE userId = XXX AND action = YYY AND ignore = 0 AND DATEDIFF(date,NOW())<= DAYS

重置规则: UPDATE ignore = 1 FROM log WHERE userId = XXX

如果他的评分发生变化,结果仍然有效(你只需要与其他总数进行比较)

创建规则表时:

  • 行动
  • 范围
  • rating_min
  • rating_max

您可以查询以下权限:

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

所以你得到一个像这样的表登录: - comment => 1 - votes => 0

您必须每次操作都更新此表(如果当天的第一个操作或更新行的计数,则创建一个新行)

缺乏规则意味着没有采取任何行动,因此我们可以忽略它。

那么在用户表中有三个名为remainingPostsremainingCommentsremainingVotes列? 当用户执行特定操作时,您将减少列,并且通过这种方式,管理员可以始终“重新填充”这些列,甚至高于原始限制。

===

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

如果我理解正确,你有一个用户可以发布1个博客,并评论10次。 现在,他/她已经评论了5次并发布了博客。 您希望管理员单击一个按钮,现在用户可以再次发布博客并发表评论10次?

它可能有点像黑客,但您可以计算正在重置/忽略的操作,并从当前操作中减去它?

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

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

而你做这样的事情

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

如果计数 - 更改是好的,那么你已经设定好了。

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

  • 为用户启用功能/可能性的过程
  • 用户功能的数据模型

例如,您可以拥有一个表示用户功能的简单多对多表:

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

在user_id键入的某些表中,您需要两列(post_count:int,last_post:date)。

暂无
暂无

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

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