php - 在事件记录和即将到来的事件记录之间进行更改的最佳方式是什么?

标签 php mysql database

我使用 token 来表示用户可以发送的消息数量(1 条消息需要 1 个 token )。目前,我刚刚从总体值中减去该值来检查用户是否还有剩余 token ,并且工作正常。

我正在尝试更改它,以便它显示哪个 bundle 处于事件状态,因此我需要检查用户在事件 bundle 更改为 upcoming_bundle 中是否没有足够的剩余 token 。

示例:

存储的用户数据:

Table Name: Tokens

第一条记录

id: 1
user_id: 5
bundle_type: small
value: 10
value_remaining: 4
state: active_bundle

第二条记录

id: 2
user_id: 5
bundle_type: large
value: 100
value_remaining: 100
state: Upcoming_bundle
  • 用户发送 10 条消息(10 个 token )
  • 第一条记录中只剩下 4 个标记。使用剩余 4 个代币并离开 6 个代币
  • 然后从当前处于事件状态的第二条记录中减去 6 个 token ,从而剩下 94 个 token 。

我是否应该在每次发送消息时检查数据库并更新数据库以一次减去 1 个 token ,然后当 remaining_value 达到 0 时更改 active_bundle 为非事件状态,upcoming_bundle 为事件状态?

最佳答案

如果这是您的数据模型,那么我将获取所有事件的和即将推出的 bundle ,然后在 php 中执行逻辑,例如减去剩余的代币,更改状态等,然后将它们更新为交易。

如果您对数据的结构很灵活,我宁愿有某种事务日志,我可以从中读取每个操作,即是否添加了 bundle 或使用带有时间戳的 token 。例如这样:

id | user | change | comment             | timestamp
1  | 1    | 10     | bought small bundle | 2016-09-06 09:30:00
2  | 1    | -1     | sent message        | 2016-09-06 10:56:00
3  | 2    | -3     | sent multi-message  | 2016-09-06 10:57:00

其中 id 是交易 ID,user 是用户 ID,change 是添加的代币数量(通过添加 bundle )或使用(通过发送一条或多条消息)并注释描述操作的消息。当您想知道还剩下多少 token 时,您只需搜索该用户并检查他们的 SUM(change) 而不是奇怪地搜索事件/即将推出的 bundle 。显然,这可以根据您的需要或多或少地复杂化。

这没有考虑您的实际域名!还有更多方法,每种方法都有其缺点。例如,当 transaction_log-table 由于用户数量和事件增加而变大时,我的方法可能会出现问题,尽管这种可能性很小(我已经看到 mysql 在类似的日志表中具有几百万条记录时表现良好)。重要的部分是:您应该弄清楚什么对您的用例来说是重要的,并围绕需求构建解决方案

关于php - 在事件记录和即将到来的事件记录之间进行更改的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39344508/

相关文章:

javascript - 尝试使用 jquery-csv 解析 Mustache.js 模板的 csv 时出现语法错误

php - Jenkins 无法识别 Composer 命令

mysql - 你能看出以下SQL注入(inject)防御方案中的漏洞吗?

php - 直接使用 PDO 类是否更安全?

mysql - Sql - 带有 IN 条件的 WHERE 子句

mysql - 需要在我的数据库 sql 中创建 View 方面的帮助

sql-server - 使用规范化表真的更好吗?

php 对象关联数组

php - 引用:什么是变量作用域?哪些变量可从何处访问?什么是“ undefined variable ”错误?

mysql - 如何在mysql中使用where exists or not exists实现相交