使用Phalcon模型管理器的最近距离算法

时间:2014-09-07 12:20:58

标签: php phalcon

我正在尝试使用select语句根据输入的lat / lng值选择记录的最近位置。我正在使用phalcon框架构建我的Web应用程序。

我按照https://developers.google.com/maps/articles/phpsqlsearch_v3?csw=1的谷歌地图教程中的教导跟踪查询算法,并尝试使用phalcon模型管理器重建它。

来自Google的select语句

SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;

这就是我目前的

$query = $this->modelsManager->createQuery("SELECT id, ( 3959 * acos( cos( radians(:locationlat:) ) * cos( radians( locationlat ) ) * cos( radians( locationlng ) - radians(:locationlng:) ) + sin( radians(:locationlat:) ) * sin( radians( locationlat ) ) ) ) AS distance FROM Listing HAVING distance < 25;");

$listing = $query->execute(array(
    'locationlat' => '1.313022',
    'locationlng' => '1.313022',              
));

注意:在我的表中,每条记录都有一个locationlat,locationlng列(而不是google教程中显示的lat / lng)

我在下面遇到这个错误,我不知道它是什么。

Scanning error before '' when parsing: SELECT id, ( 3959 * acos( cos( radians(:locationlat:) ) * cos( radians( locationlat ) ) * cos( radians( locationlng ) - radians(:locationlng:) ) + sin( radians(:locationlat:) ) * sin( radians( locationlat ) ) ) ) AS distance FROM Listing HAVING distance < 25; (259)

这里有任何phalcon专家吗?

1 个答案:

答案 0 :(得分:1)

PHQL查询中的分号导致Scanning error before ...问题。只需删除它,查询就可以了:

$query_text = "SELECT 
                 id, 
                 ( 3959 * acos( cos( radians(:locationlat:) ) * cos ( radians( locationlat ) ) * cos( radians( locationlng ) - radians(:locationlng:) ) + sin( radians(:locationlat:) ) * sin( radians( locationlat ) ) ) ) AS distance 
               FROM 
                 Listing
               HAVING 
                 distance < 25";
                             ^^

$query = $this->modelsManager->createQuery($query_text);

$listing = $query->execute(array(
    'locationlat' => '1.313022',
    'locationlng' => '1.313022',              
));