2012-04-05 144 views
16

我期待实现类似的东西,以stackoverflow徽章。你也可以将它们等同于游戏中的成就。徽章/成就

但我不确定如何设计数据库/代码/跟踪他们

我得到了我应该徽章如做:

邦汇×1456首先赏金您手动授予对另一个人的问题

,因为他们是一次性事件,而是如何处理其他如:

分析×16389走访FAQ
选民×1783的投票在600的每一个部分问题和总票数的25%以上都在问题 直言不讳×188聊天发布10条信息是由10个不同的用户

等主演...

如何处理,如何保持每个进程的跟踪等等......是否有教程或可以帮助我找出设计模式的东西?

回答

17

对于给定的例子,基本上有两种机制,你将需要。

我不知道它是如何完成的,这只是一个解决方案的建议。

我们先来看'分析'。当用户访问FAQ中的特定区域时,您将不得不通过简单的标志进行录制。让我们设想一个数据库表,每个FAQ部分和一个用户ID都有一个字段。这开始为“N”(或0,或者您想表示您的标志)。当用户访问该区域时,您会调用代码将该字段翻转为“Y”。当所有字段都是“Y”时,您可以授予该徽章。对于“选民”和“直言不讳”,您可以通过对现有数据的查询来检索这些信息,假设他们的查询不会太繁琐。您将需要考虑何时运行这些检查。这基本上归结为两种选择。

1)当执行一个动作可能会得到一个徽章颁发(FAQ的浏览器访问部分,表决关于一个问题,问题主演由别人)

2)定期(每小时,每天,等等)根据当前数据对所有徽章进行检查。

请记住,徽章在Stackoverflow中是单向的,所以如果你想要等价,那么你不必考虑逻辑来“取消奖励”徽章。

+0

我想我现在明白了。看起来很简单:P只是一个问题 - 你说'分析'使用数据库表,但会有很多这样的类似徽章,我将如何去为他们每个人?我应该为每个徽章使用不同的表格,还是有某种方法将这些统一到一张表格中?否则,我可能会得到很多数据库表,每个徽章类型一个......但答案是thnx - 这有助于我开始朝正确的方向发展。顺便说一下,你的2意味着徽章在获得成功的时刻不会获得奖励,对吧?是的,不会有不奖励。 – b0x0rz 2012-04-05 12:38:54

+1

你如何实现这个表取决于你。你可以有一个带有user_id,badge_id,badge_acheivement_id,flag的4列表 - 这可以扩展到多个徽章。而且,这意味着他们在获得成功的那一刻就不会获得奖励。当然是 – 2012-04-05 12:42:04

+0

:)谢谢。我认为这解决了我所有的问题。我认为经常进行时间安排检查有可能缩短“获得”徽章和显示徽章之间的时间差距。 – b0x0rz 2012-04-05 12:44:35