我正在尝试使用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专家吗?
答案 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',
));