使用 mysql 进行地理位置搜索查询

Posted

技术标签:

【中文标题】使用 mysql 进行地理位置搜索查询【英文标题】:geolocation search-query with mysql 【发布时间】:2013-02-16 13:58:38 【问题描述】:

我尝试对我附近的位置列表进行 mysql 查询(按最近的顺序排列)。我不知道该怎么做。我发现了这个有趣的帖子:http://funkjedi.com/technology/308-search-using-geolocation-data-in-mysql/

对我来说一切都很清楚。但查询不起作用。我做了以下 SQL 查询:

SELECT *, ($distance_formula) AS distance FROM restaurants 
    WHERE (geolatitude BETWEEN $lat_b1 AND $lat_b2) 
    AND (geolongitude BETWEEN $lng_b1 AND $lng_b2) 
    HAVING distance < $radius ORDER BY distance ASC

我得到的错误如下:

Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column '$distance_formula' in 'field list'

重点是,$distance_formula 是在脚本中生成的,不是字段列表,没错。但是我应该怎么做才能让 MySQL 知道这是要执行的而不是字段呢?

如果您有任何其他帮助或其他解决方案(从绿色开始),我将非常高兴。最后,我需要一个 cakephp 的解决方案。

非常感谢

伊沃

【问题讨论】:

看起来$distance_formula 变量没有被评估并且在您的查询中显示为“$distance_formula”而不是 SQL 公式 (6371 * ACOS...)。你能把你查询数据库的地方贴出来吗? 呵呵,我这样查询我的数据库:return $this->query($sql);这就是它在 cakephp 中与其他查询一起工作的方式。我认为问题不在于我查询我的数据库。 只需去掉 distance_formula 前面的 $ 符号并运行它 哈!谢谢!我解决了这个问题!我使用 sprint_f() 将 php 变量插入到 SQL 字符串中。我不知道为什么这应该更好,但它就是这样工作的! 更多信息在这里:***.com/questions/20865747/geolocation-mysql-query 【参考方案1】:

我认为肯定是windows和unix格式的文件有问题,或者有时候这个例子有一些写作问题,所以要求你稍微改变一下命令,把命令写成:

 $sql = "SELECT *, (" . $distance_formula . ") AS distance FROM listings WHERE (latitude BETWEEN " . $lat_b1 . " AND " . $lat_b2 . ") AND ( longitude BETWEEN " . $lng_b1 . " AND . " $lng_b2 . ") HAVING distance < " . $radius . "ORDER BY distance ASC";

【讨论】:

以上是关于使用 mysql 进行地理位置搜索查询的主要内容,如果未能解决你的问题,请参考以下文章

MySQL - 如何使用地理位置数据加快搜索速度?

使用交叉连接和 Hversine 公式在 MySQL 地理搜索中重复记录

MySQL搜索地理位置重叠?

MySQL:多个纬度和经度的附近位置

谁能建议我如何使用 Spring 从 MySQL 数据库中进行基于位置的搜索?

Solr 7 - 如何使用地理空间搜索进行全文搜索