[英]User's possibilities on site
我想在网站上建立一个系统,允许用户根据他们的评级做一些事情。 例如,我有评级值X的规则:
对于评级值Y,规则可能如下:
每天晚上我都会重新计算用户的评分,所以我知道每个用户能做什么。 可能性不会对每个评级的重新计算进行求和或重置。
更重要的是,管理员可以随时填写具体用户的可能性。
什么是最佳数据库(MySQL)结构?
我可以算一下具体用户做了什么:
SELECT COUNT(*) FROM posts WHERE UserID=XXX AND DateOfPost >= 'YYY'
SELECT COUNT(*) FROM comments WHERE UserID=XXX AND CommentOfPost >= 'YYY'
但是在这种情况下如何管理填充可能性呢?
我会记录每个用户每天的操作数,并使用该表进行比较。
该表将包含以下字段:
检查规则: 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
如果他的评分发生变化,结果仍然有效(你只需要与其他总数进行比较)
创建规则表时:
您可以查询以下权限:
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
您必须每次操作都更新此表(如果当天的第一个操作或更新行的计数,则创建一个新行)
缺乏规则意味着没有采取任何行动,因此我们可以忽略它。
那么在用户表中有三个名为remainingPosts
, remainingComments
和remainingVotes
列? 当用户执行特定操作时,您将减少列,并且通过这种方式,管理员可以始终“重新填充”这些列,甚至高于原始限制。
===
另一个选项是将权限的到期存储在这些列中,以便您可以重置权限,只将某个列的到期时间设置为前一天。 然后,您可以使用您的查询来获取用户的剩余帖子/评论/投票数。
如果我理解正确,你有一个用户可以发布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.