rails math查询where where子句

时间:2014-11-11 00:07:57

标签: ruby-on-rails ruby sqlite

我正在使用RQ和SQlite3,我试图从位置表中获得满足包含方形属性项的数学条件的结果。 "位置" table包含Latitude:float和Longitude:float Field。 这是我的搜索代码行:

@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子句中查询我的条件。似乎将其中的术语平方化就是问题所在。我该怎么做?

2 个答案:

答案 0 :(得分:0)

根据这篇文章:

How to find power of a number in SQLite

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

你需要在Ruby中做尽可能多的数学运算并传递原始比较值。

答案 1 :(得分:0)

SQLite没有**运算符。

除非你有created a user-defined function,否则你必须手动计算平方:

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

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