laravel 在mysql中为数百万数据执行公式

3phpmpom  于 2023-03-04  发布在  Mysql
关注(0)|答案(2)|浏览(154)

users包含数百万数据
users具有ID、竞争日期、第三方ID等列
thirdparty_id是我必须为所有用户更新的新列
查找thirdparty_id过程
对于每个用户,存在对应的订单表,我们必须从该订单表中获取最新订单,我们将从该订单表中获得一个值,基于该值,我们可以计算某个速率
我们可以在另一个表中搜索该速率,从那里我们将得到thirdparty_id
我已经为个人用户做了一切,它的工作很好
现在我的问题是如何为数百万用户执行此操作?
我正在使用laravel
该过程获取具有thirdparty_id为空所有用户,并调用公式函数来查找id并更新
但是获取所有意味着数百万的数据在一个查询?所以如果我给限制什么的最大限制我可以给予?
还有哪些其他选项可供执行?
我使用的查询

select id as userid from users where thirdparty_id is null limit {some limit}

in foreach of this

select amount from orders wehere user_id =userid order by created desc limit 1

some wiered formula with amount will give `rate`

select id from third party where start_rate > rate and end_rate<rate

update users set thirdparty_id=id where id=userid
lo8azlld

lo8azlld1#

您可以使用chunk:www.example.comhttps://laravel.com/docs/9.x/eloquent#chunking-results
就像这样:

public const CHUNK_SIZE = 5000;

...

User::whereNull('thirdparty_id')->chunk(self::CHUNK_SIZE, function (Collection $users) {
    // $users is collection contains 5000 users, you can do mass update them or something you want  
});
wb1gzix0

wb1gzix02#

对于这类问题,我将使用存储过程来进行更新,而不是使用PHP之类的语言。
这样做,迁移存储过程在MySQL服务器内运行,并且您可以抛弃所有问题,如PHP执行时间、内存限制、Apache超时等。

相关问题