Php MySql按距离和时间查询

时间:2014-03-05 01:51:08

标签: mysql

我有这个查询,我想添加时间搜索。

这是我的工作查询:

$query = "SELECT *,(((acos(sin((".$lat."*pi()/180)) * sin((Lat*pi()/180)) + 
cos((".$lat."*pi()/180)) * cos((Lat*pi()/180)) * cos(((".$lon."- Lon) * 
pi()/180))))*180/pi())*60*1.1515) as distance 
FROM items 
HAVING distance < ".$distance." 
ORDER BY distance 
LIMIT ".$min." , ".$max."";

我想添加类似这样的内容

WHERE timestamp > ".$somePastDate."

几个小时以来,我已经尝试了所有我能想到的组合而没有运气。我打赌也很简单,我会摇头。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我建议您使用嵌套查询,如下所示

 SELECT *, big_cosine_law_distance_formula AS distance
   FROM (
     SELECT *
       FROM items
      WHERE items.timestamp > ".$somePastDate."
    ) AS i
 HAVING distance < ".$distance."

内部查询将按时缩小您的项目范围,因此您无需研究所有项目的大距离公式。

您可能还会考虑使用更快的基于边界框的搜索来在空间上缩小项目范围,如此处所述。 http://www.plumislandmedia.net/mysql/haversine-mysql-nearest-loc/

您可以从内部查询开始解决此类问题。

      SELECT *
       FROM items
      WHERE items.timestamp > ".$somePastDate."

当您从该查询中获得可靠的结果时,请添加外部结果。