将数据库结果分为4组

时间:2018-09-02 16:40:53

标签: ruby-on-rails ruby

(我在这里有一个Ruby / Rails / Postgres设置。)

我有成千上万个艺术家的桌子,每天我都会执行后台工作,以更新这些艺术家的各种外部资源。

每天一次执行所有操作会使这些外部API不堪重负,因此我想将该表分成4组,然后每天运行这些后台作业4次(即每6小时一次)。

如何将这些数据库结果分为4组?

最初,我只是要进行2组,然后根据“艺术家ID是否为偶/奇”进行查询,但不确定如何对4组进行该操作。

是否存在某种数学方程式可以正确地将任意数字放入4组中的任何一个?

理想情况下,我会在查询本身(Artist.where("id % 2 = ?", "0")中执行此操作,但是如果事后过滤结果数组更有意义,那也没关系。

2 个答案:

答案 0 :(得分:4)

运行这些查询(每6小时运行一次)

Artist.where("id % 4 = ?", 0) #Run at 00:00

Artist.where("id % 4 = ?", 1) #Run at 06:00

Artist.where("id % 4 = ?", 2) #Run at 12:00

Artist.where("id % 4 = ?", 3) #Run at 18:00

答案 1 :(得分:1)

您可以只计算总数,除以并使用偏移和限制:

group_amount = Model.all.count/4

scope = Model.limit(group_amount)

first_group = scope
second_group = scope.offset(group_amount)
third_group = scope.offset(group_amount*2)
fourth_group = Model.offset(group_amount*3) #not using limit in case you have new record on that table

我不确定它是否满足您的所有需求,我不知道您是否还有其他条件。