Mysql 如何显示";“家长”;具有给定位置的设施计数的公司?
我有以下数据库结构(简化): 我想做什么?我想让所有的公司都在某个地方;到目前为止,我是这样做的:Mysql 如何显示";“家长”;具有给定位置的设施计数的公司?,mysql,ruby-on-rails,ruby,activerecord,group-by,Mysql,Ruby On Rails,Ruby,Activerecord,Group By,我有以下数据库结构(简化): 我想做什么?我想让所有的公司都在某个地方;到目前为止,我是这样做的: @companies = Company.select('COUNT(id) AS grouped_facilities, GROUP_CONCAT(id) AS grouped_facilities_ids') .includes(:services)
@companies = Company.select('COUNT(id) AS grouped_facilities,
GROUP_CONCAT(id) AS grouped_facilities_ids')
.includes(:services)
.within(distance, origin: [lat,lng])
.where('companies.corporate_hq = "0""')
.group('companies.company_name')
.order("companies.count_of_facilities DESC")
到目前为止,这个解决方案是可行的,但根据公司名称对公司进行分组并不完美——因此我添加了列parent
。根/母公司已在此处设置0
,以及母公司的所有其他“子”ID
如果我搜索一个特定的位置,我想找到这个位置有多少设施,并显示给定位置的母公司+设施计数
我试着按公司对公司进行分组
。母公司
,但这可能不起作用,因为有这么多公司有公司。母公司=0
,对吗
我如何才能获得所需的输出,而不是使用组('companys.company\u name
)
编辑:
给定位置的所需输出:
Apple - 1 facility in this area
BWM - 2 facilities in this area
HP - 2 facilities in this area
您需要考虑如何以Rails的方式做更多的事情,并尽可能避免原始SQL。应该避免编写原始SQL查询!例如,要查找所有“母公司”,请执行以下操作:
@companies = Company.where(:parent => 1).within(distance, origin: [lat,long]).where(:corporate_hq => 0)
更干净,它允许查询优化器完成其工作,并允许ActiveRecord为您抽象出内容
这并不是说您永远不需要用实际的SQL来扩充它,而是尽可能避免它。它使您更具可移植性,并允许您在某个时候以最小的麻烦更换数据库后端。你在某种程度上做到了这一点。。只需继续思考set-wise(SQL-ish)并继续添加复合语句。感谢David的回答。但是,使用
Company.where(:parent=>1)
将导致在给定位置仅获取“parent”公司,对吗?但我还需要搜索工厂的位置…对不起,根据你的问题,看起来你只想要母公司。。。标题实际上是“如何仅显示母公司”对不起,我将更改它。
@companies = Company.where(:parent => 1).within(distance, origin: [lat,long]).where(:corporate_hq => 0)