gpt4 book ai didi

ruby - "has_many"关联中第一行的 SQL 语句

转载 作者:太空宇宙 更新时间:2023-11-03 16:57:23 24 4
gpt4 key购买 nike

我试图只访问关联表的第一行。最好和最快的方法是什么? (最好是 SQL 语句)

协会:

class User
has_many :addresses


class Address
belongs_to :user

我能想到的最快方法是:

User.includes(:addresses).find(:all).map {|m| m.addresses.first.area_code}

但是这个操作对于我的要求来说太慢了(假设我有 200 个用户,平均有 20 个地址(~4000 个地址 总体))

这只是我正在尝试做的一个例子。

我认为这可以用 SQL JOIN 语句来表达,但我没有看到如何接收每个用户第一个地址的表。

预期输出示例:

12345 #=>User.find(1).addresses.first.area_code

56789 #=>User.find(2).addresses.first.area_code

23456 #=>User.find(3).addresses.first.area_code

.....

最佳答案

area_codes = 
Address.find_by_sql(
"SELECT DISTINCT user_id, area_code FROM addresses"
).index_by(&:user_id)
User.find(:all).map{ |u| [u, area_codes[u.id]] }

如果您希望所有这些都合而为一。

关于ruby - "has_many"关联中第一行的 SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6495946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com