#one
A.where("condition").offset((page-1)*4).find_each(batch_size: 4) do |a|
B.find(a.b_id)
C.find(a.c_id)
D.find(a.d_id)
end
#two
A.find_by_sql("一条sql语句,各种join")
#three
A.joins(:B).joins(:C).joins(:D).where("condition").offset((page-1)*4).limit(4)
Which one is best? (Based on Rails)
@egg_show 是批处理,所以需要有东西“处理”,一般是做数据的增删改。找东西没有 ActiveRecord 或者 raw sql 找不到而需要批处理的。
这个结果是对的,因为 joins 用的 INNER JOIN.
你如果想要即使不匹配的数据,就需要手动写 LEFT OUTER JOIN
Client.joins('LEFT OUTER JOIN addresses ON addresses.client_id = clients.id')