我有一个问题。 如何在子查询选择中使用父属性?
示例
Record A
id: 1
parent_id: 1
name: Test A
Record B
id: 2
parent_id: 1
name: Test B
Record c
id: 3
parent_id: 2
name: Test c
查询结果: [{name: '测试 A', 总计: 2}, {name: '测试 B', 总计: 2}, {name: '测试 C', 总计: 1}]
我有这个疑问
Record.select('(select COUNT(*) from records where records.parent_id = parent_id), name')
但这会获取所有记录的总数,仅当我设置 id 时才有效
Record.select('(select COUNT(*) from records where records.parent_id = 2), name')
直接在查询本身中写入所需的格式可能很复杂。相反,您可以使用查询检索计数并使用 Ruby 代码格式化结果。
records = Record.group(:parent_id).select("group_concat(name) as names, count(*) as total")
res = []
records.each do |record|
name_arr = record['names'].split(",")
res << name_arr.map{|name| {'name' => name, 'total' => record['total']}}
end
return res