繁体   English   中英

在where子句中进行Rails数学查询

[英]rails math query inside where clause

我正在将ROR与SQlite3配合使用,并且尝试从位置表获取满足数学条件(包含属性的平方项)的结果。 “位置”表包含“纬度:浮点数”和“经度:浮点数”字段。 这是我的搜索代码行:

@results = Location.where('Latitude > ? AND Latitude < ? AND Elevation > ? AND Elevation < ? AND ((Latitude-?)**2 +(Longitude - ?)**2 <= (?)**2)',@latitude_Range_Start,@latitude_Range_End,@elevation_Range_Start, @elevation_Range_End,@latitude_mycity.to_f, @longitude_mycity.to_f, @rad_range.to_f)

Rails显示此错误:

SQLite3::SQLException: near "*": syntax error: SELECT "locations".* FROM "locations"  WHERE (Latitude > 20.7333148 AND Latitude < 40.7333148 AND Elevation > -651.3542785644531 AND Elevation < 1348.6457214355469 AND ((Latitude-30.7333148)**2 + 
        (Longitude - 76.7794179)**2 <= (1111.0)**2))

如何查询where子句中的条件。 看来,对其中的术语进行平方运算是一个问题。 我怎么做?

根据这篇文章:

如何在SQLite中找到数字的幂

SQLite没有幂/指数数学函数。

您将需要在Ruby中进行尽可能多的数学运算并传递原始比较值。

SQLite没有**运算符。

除非创建了用户定义的函数 ,否则必须手动计算平方:

...where('Latitude  BETWEEN ? AND ?  AND
          Elevation BETWEEN ? AND ?  AND
          (Latitude  - ?) * (Latitude  - ?) +
          (Longitude - ?) * (Longitude - ?) <= ? * ?', ...

(请注意,此公式假定地球是平坦的。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM