标签:model-view-controller mysql php
我将取得诸如
获得1000分
登录20次
在24小时内完成2个任务
等等
编程的最佳方法是什么? (例如,其背后的逻辑.在每次页面加载时检查所有可能的成就都是浪费资源)
解决方法:
这是一个开放的问题.一种方法是将用户已经实现的目标的进度存储在数据库表中(每项成就对应一列),每次取得进展时,将进度值存储起来.达到目标时,可以为每个成就设置一个魔术值(零,一百万,无论什么),然后您只需检查每个用户条目中的哪些列具有魔术值即可.
您可以只存储进度并计算每次访问的成就状态,但是我认为这对于诸如您提到的限时任务之类的问题是有问题的,如果您出于任何原因更改目标而使他们失去成就,人们可能会感到恼怒以前已经获得.
可以说,更正确的方法是拥有一个静态的“成就”表,其中每一行都详细说明一项成就以及目标.然后,您将有一个单独的“进度”表,每个用户在其中将针对他们要争取的每个不同成就都有一行.这是要执行的工作,但比起将目标硬编码到进度表中的列名上,您可以在以后的日期轻松得多地添加/删除/更改目标.我认为您不应低估此后将给您带来的价值.这样,进度表可以为每个用户/成就组合包含多个列,这使您可以存储达到目标的时间等信息,并且可以非常简单地获得如下成就列表:
SELECT achievement_id
FROM progress
WHERE user_id = $user
AND achievment_time IS NOT NULL
如果要在每个页面上显示成就,则必须检查每个页面的加载情况,但是如果您以其中一种方式记录进度,则不会回到第一原理,也不会计算已经进行了多少次登录,每次完成多少任务等-仅是数据库中的SELECT,我认为这就是您的意思.
对于诸如登录次数(每次执行操作时只需增加一个计数器)之类的东西来说,记录进度很简单,但是显然您必须更加仔细地考虑保持进度限制成就进度的逻辑.在这里,您需要跟踪时间戳,以了解何时在单独的表中执行了操作(当然,您可能已经在执行此操作了),并且每次创建新时间戳时,都要对前一个时间段中的时间戳进行计数,以查看是否已经达到了成就.
标签:model-view-controller,mysql,php 来源: https://codeday.me/bug/20191201/2080327.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。