如何在DreamFactory API中进行复杂过滤

时间:2014-06-10 23:19:38

标签: sql api

我正在考虑将DreamFactory用于我的REST API ..我有一个名为' tags'有一个名为' lat'还有一个名为' lon'存储在我的数据库中的位置的纬度和经度

问题是我需要能够将纬度和经度与distance一起传递给我的服务电话并过滤结果以仅返回行where位置是< =距离从我提供的纬度和经度提供..

我的SQL命令有点生疏,但是像这样:

SELECT  *,   3956 * 2 * ASIN(SQRT( POWER(SIN((42.347109 - abs(tags.lat)) * pi()/180 / 2),2) + 
COS(42.347109 * pi()/180 ) * COS(  abs (lat) *  pi()/180) * POWER(SIN((-71.075589 – tags.lon) *  
pi()/180 / 2), 2) ))   as distance FROM tags having distance <  2;

任何人都有过这种过滤器的经验吗?尤其是DreamFactory?

1 个答案:

答案 0 :(得分:2)

听起来您需要在运行时跨表中的完整记录集执行距离计算。因此,从性能角度来看,您可能希望让数据库使用存储过程进行此计算。有关此方法的更多信息,请参阅此文章。

latitude/longitude find nearest latitude/longitude - complex sql or complex calculation

使用服务器端事件触发存储过程很快就会出现在DreamFactory路线图中(不是在6月中旬的1.6版本中,而是在7月时间帧的下一个版本中)。该功能允许您从客户端进行REST API调用,触发DreamFactory以运行存储过程并将正确的JSON(或XML)格式的记录返回给客户端。

DreamFactory目前支持MySQL,Postgres和SQL Server,因此只要您将这些关系数据库之一用于存储过程,存储过程方法就可以运行(Oracle和DB2也在路线图上)。

希望有所帮助。