【发布时间】:2018-05-22 08:25:28
【问题描述】:
我的查询:
records = ActiveRecord::Base.connection.execute("SELECT * FROM leads WHERE leads.status=1 AND leads.account_id=1 AND leads.id > 253380")
结果:
records.first
[253381, 1, "first", "king", "CEO", "Jewelry & Toys", "11111", "22222", nil, nil, nil, nil]
records.fields
["id", "account_id", "first_name", "last_name", "job_title", "department", "work_number", "mobile_number", "address", "city", "state", "zipcode"]
到目前为止一切都很好,但现在当我离开查询时,如下所示:
records = ActiveRecord::Base.connection.execute("SELECT * FROM leads LEFT JOIN lead_details ON lead_details.id=leads.id AND lead_details.account_id = leads.account_id WHERE leads.status=1 AND leads.account_id=1 AND leads.id > 253380")
结果:
records.first
[253381, 1, "first", "king", "CEO", "Jewelry & Toys", "11111", "22222", nil, nil, nil, nil, nil, nil, nil, nil]
records.fields
["id", "account_id", "first_name", "last_name", "job_title", "department", "work_number", "mobile_number", "address", "city", "state", "zipcode", "id", "account_id", "stars", "score"]
注意:最后一个数组"id", "account_id", "stars", "score"是连接表的列
当我尝试将记录转换为哈希第二个id,account_id 将覆盖第一个id,account_id,结果将是这样的
{"id"=>nil,
"account_id"=>nil,
"first_name"=>"first",
"last_name"=>"king",
"job_title"=>"CEO",
"department"=>"Jewelry & Toys",
"work_number"=>"11111",
"mobile_number"=>"22222",
"address"=>nil,
"city"=>nil,
"state"=>nil,
"zipcode"=>nil,
"stars"=>nil,
"score"=>nil
}
如何解决这种数据覆盖问题?有什么方法可以根据表名或其他东西将查询结果分区为嵌套数组?
【问题讨论】:
-
我认为覆盖是因为
#to_hashugar。在调用#to_hashugar之前,你能展示一下llead的样子吗? -
@maicher - [253381, 1, 'first', 'king', 'CEO', 'Jewelry & Toys', '11111', '22222', nil, nil, nil, nil,无,无,无,无]
-
在上面的评论中 - 最后 4 个 nil 是lead_details 表。 Lead_details 表有列 - id、account_id、stars、score。因此,由于lead_details 列(id,account_id)被覆盖。有什么方法可以在连接时根据表区分 mysql2 查询结果??
标签: mysql ruby-on-rails ruby activerecord