首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails Mysql2 2::Error:使用count获取组

Rails Mysql2 2::Error:使用count获取组
EN

Stack Overflow用户
提问于 2018-01-25 01:39:55
回答 2查看 117关注 0票数 0

当我在附近搜索一个地方附近的修理店时,我得到了一个突然的错误,当我用它来搜索一个地方附近的修理店时。我正在使用地理编码创业板,以地理编码的维修商店的创建。

假设我将查询称为:

代码语言:javascript
复制
Repairshop.where(:approved => true).group(:title).count

我得到了正确的结果,如散列:{"my title" => 1}和一切都很好。

现在,当我在城市或州调用组,然后依赖结果时,我得到一个Mysql2错误:

让我分几步展示一下:

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

给出了主动记录关系与我的标题修理厂,它工作良好,查找与近查询。

  1. 在将其与组(:city)链接后,我得到如下所示的相同结果:

  1. 现在,当我试图把它串起来的时候,就像: Repairshop.where(:=> true).near('syracuse',200).group(:city).count

我得到如下错误:

Mysql2 2::error : SQL语法中有一个错误;检查与您的MySQL服务器版本相对应的手册,以获得正确的语法以使用接近“*,3958.755864232 *2*ASIN”(SQRT(电源(SIN(43.0481221- repairshops.latitude) )在第1行:选择不同的计数。*,3958.755864232 *2*ASIN(SQRT(POWER(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)作为距离,MOD(CAST(repairshops.longitude -76.14742439999999) / 57.2957795),(repairshops.latitude-43.0481221/ 57.2957795) *57.2957795)+ 360小数),(如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_sin_76_14742439999999_repairshops_longitude_all_pi_180_2_2_as_dis,)从repairshopsrepairshops.approved =1和(repairshops.latitude在40.153486437783044到45.94275776221696之间,repairshops.longitude在-80.10844293387429到-72.1864058661257之间和(3958.755864232 *2*ASIN)(功率(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~2 0)群,按repairshops.city排序

Repairshop模型类如下所示,我已经安装了geocoder:

代码语言:javascript
复制
class Repairshop < ActiveRecord::Base
    geocoded_by :full_address
    after_validation :geocode


end

在SQLite中,一切都很完美,但是在这里,链接时会出现一个错误。我没有直接使用MySQL语法,所以不知道问题出在哪里。

注意:我正确地完成了MySQL2设置,并使用本地服务器进行开发。组(:.count)对于与位置无关的其他字段很好地工作

会很感激你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2018-01-25 04:44:19

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

代码语言:javascript
复制
Repairshop.where(
  id: Repairshop.where(
    :approved => true
  ).near(
    'syracuse', 200
  ).select(:id)
).group(
  :city
).count
票数 1
EN

Stack Overflow用户

发布于 2018-01-26 00:00:02

工作解决办法是使用:

Repairshop.where(id: repairshop.near(params[:location], params[:radius]).map{|i| i.id})而不是Repairshop.near(params[:location], params[:radius]),然后运行组和计数

但如果有人能提出更好的解决方案。会很感激的!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48434348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档