【发布时间】:2017-08-17 02:28:59
【问题描述】:
这不一定只适用于 Laravel php 框架,因为我相信我的预期任务也可以在 MySQL 服务器本身上使用适当的 SQL 语句进行处理。
有以下3个表:
用户(>200 万行)
- 身份证
- 姓名
- 余额(十进制、14、2)
- package_id
包(5 行)
- 身份证
- 姓名
- 值(十进制、14、2)
- 百分比(十进制、5、2)- 存储为 0.10 而不是 10
事务(日志)
- 身份证
- user_id
- 说明
- 金额
以上所有表格都分别链接到对象/模型 User、Package 和 Transaction。它们包含时间戳列,并由 Laravel 自动插入/更新。
-
应用程序计划根据包的 value(分配给用户)更新表 users 中的列 balance每天午夜 12:00 乘以 percent 字段加上原始余额值。更清晰的表达是:
users.balance = users.balance + (packages.value * packages.percent)
-
同时,应将每次余额更新的事务日志插入数据库:
user_id: [用户 ID]
描述:用新余额更新了用户 [用户名]
金额:[添加金额]
我已经设法使用以下 SQL 语句实现了第一个操作:
UPDATE users
INNER JOIN packages
ON users.package_id = packages.id
SET users.balance = users.balance + (packages.value * packages.percent);
我似乎找不到任何解决方案以最高效率和交易安全的方式同时实现这两项操作。我可能会同时检索用户和包并在应用程序中处理它们,然后执行更新和插入,但这将是一件不费吹灰之力的事情,因为它确实效率低下。
如果有人可以帮助我解决问题,我将不胜感激!
【问题讨论】:
标签: php mysql laravel join transactions