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)