【问题标题】:Nearest distance algorithm using Phalcon model manager使用 Phalcon 模型管理器的最近距离算法
【发布时间】:2014-09-07 12:20:58
【问题描述】:

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

我按照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列(而不是谷歌教程中显示的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 专家吗?

【问题讨论】:

    标签: php phalcon


    【解决方案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',              
    ));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-13
      • 2019-08-14
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-26
      • 1970-01-01
      相关资源
      最近更新 更多