当我在附近搜索某处附近的维修店时,我突然出现组和计数错误。我正在使用geocoder gem在创建时对维修店进行地理编码。

假设我将查询称为:

Repairshop.where(:approved => true).group(:title).count


我得到正确的结果为hash:{"my title" => 1}一切都很好,很花哨。

现在,当我在城市或州呼叫group,然后依靠结果时,出现Mysql2错误:

让我逐步显示它:


Repairshop.where(:approved => true).near('syracuse',200)



  提供与我的标题维修店的活动记录关系,并且有效
  很好,可以通过近距离查询找到。



与group(:city)链接后,得到的结果如下所示:


mysql - Rails Mysql2::Error:使用计数获取组-LMLPHP


现在,当我尝试像这样链接它时:

Repairshop.where(:approved => true).near('syracuse',200).group(:city).count


我收到以下错误消息:

mysql - Rails Mysql2::Error:使用计数获取组-LMLPHP


  Mysql2 :: Error:您的SQL语法有错误;查看手册
  对应于您的MySQL服务器版本的正确语法,
  在'*,3958.755864232 * 2 * ASIN(SQRT(POWER(SIN((43.0481221-
  第1行:“ SELECT DISTINCT COUNT(DISTINCT)”
  修理厂。*,3958.755864232 * 2 * ASIN(SQRT(POWER(SIN((43.0481221-
  repairshops.latitude)* PI()/ 180/2),2)+ COS(43.0481221 * PI()/
  180)* COS(repairshops.latitude * PI()/ 180)*
  电源(SIN((-76.14742439999999-repairshops.longitude)* PI()/ 180 /
  2),2))))AS距离,MOD(CAST((ATAN2((((repairshops.longitude-
  -76.14742439999999 / 57.2957795),(((repairshops.latitude-43.0481221)/ 57.2957795))* 57.2957795)+ 360 AS十进制),360)AS轴承)AS
  count_repairshops_all_3958_755864232_all_2_all_asin_sqrt_power_sin_43_0481221_repairshops_latitude_all_pi_180_2_2_cos_43_0481221_all_pi_180_all_cos_repairshops_latitude_all_pi_180_all_power_s__in_76_1474243999
  城市AS城市FROM repairshops WHERE repairshopsapproved = 1 AND
  (repairshops.latitude在40.153486437783044和45.94275776221696之间
  AND repairshops.longitude -80.10844293387429 AND之间
  -72.1864058661257 AND(3958.755864232 * 2 * ASIN(SQRT(POWER(SIN((43.0481221-repairshops.latitude))* PI()/ 180 /
  2),2)+ COS(43.0481221 * PI()/ 180)* COS(repairshops.latitude *
  PI()/ 180)*电源(SIN((-76.14742439999999-repairshops.longitude)*
  PI()/ 180/2),2))))在0.0和200)之间分组
  repairshopscity按距离ASC排序


Repairshop模型类如下所示,我已经安装了地址解析器gem:

class Repairshop < ActiveRecord::Base
    geocoded_by :full_address
    after_validation :geocode


end


一切在SQLite中都可以正常运行,但是在链接时会出现错误。我没有直接使用MySQL语法,所以不知道问题出在哪里。

注意:我正确地进行了MySQL2的安装,并使用了本地服务器进行开发。 group(:field).count适用于与位置无关的其他字段

会非常感谢您的帮助。

最佳答案

Geocoder gem似乎正在以与#group不兼容的方式重写select子句。使用子选择可能是一种解决方案:

Repairshop.where(
  id: Repairshop.where(
    :approved => true
  ).near(
    'syracuse', 200
  ).select(:id)
).group(
  :city
).count

08-26 08:44