我有以下数据库结构(简化):
id | company_name | parent | count_of_facilities | longitude | latitude
1 | Apple | 0 | 3 | ... | ...
2 | Apple | 1 | 3 | ... | ...
3 | Apple | 1 | 3 | ... | ...
4 | Bmw | 0 | 2 | ... | ...
5 | Bmw | 4 | 2 | ... | ...
6 | HP | 0 | 5 | ... | ...
7 | HP | 6 | 5 | ... | ...
8 | HP | 6 | 5 | ... | ...
9 | HP | 6 | 5 | ... | ...
10 | HP | 6 | 5 | ... | ...
我要做什么-我想让所有公司都在某个位置;到目前为止,我是这样进行的:
@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。如果我搜索特定的位置,我想查找该位置有多少设施,并显示母公司+给定位置的设施数量。
我尝试用
group
来companies.parent
公司,但这可能不起作用,因为有很多公司使用companies.parent = 0
,对吗?如何获得所需的输出而不是使用
group('companies.company_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进行扩充,而是尽可能避免使用它。它使您更具可移植性,并允许您在某些时候以最小的麻烦换出数据库后端。您已经在某种程度上做到了。.只需继续考虑按条件设置的事情(SQL语句)并继续添加复合语句。
关于mysql - 如何显示具有给定位置设施数量的“母公司”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35540865/