使用 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 进行地理位置搜索查询的主要内容,如果未能解决你的问题,请参考以下文章
使用交叉连接和 Hversine 公式在 MySQL 地理搜索中重复记录