【问题标题】:How to get 10 closest locations from table如何从表中获取 10 个最近的位置
【发布时间】:2013-05-22 09:38:00
【问题描述】:

我想获得 10 个最近的经度和纬度位置。我将经度和纬度存储为双倍。我试过这个:

SELECT * FROM company as dest where 3956 * 2 * ASIN(SQRT( POWER(SIN((122.4058 - abs( dest.latitude)) * pi()/180 / 2),2) + COS(122.4058 * pi()/180 ) * COS( abs (dest.latitude) * pi()/180) * POWER(SIN((37.7907 – dest.longitude) * pi()/180 / 2), 2) )) as dis <10 and ORDER BY dis limit 10; 

但我收到此错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '– dest.longitude) * pi()/180 / 2), 2) )) as dis <10 and ORDER BY dis limit 10 ' at line 1

如何解决这个错误?

【问题讨论】:

  • 里面多了一个括号)..找出来
  • @AhmedZ。那么错误就不存在了。
  • 有 16 个括号打开和 16 个括号关闭!
  • 现在还没有找到丢失的括号!
  • 我已经添加了,现在我得到这个错误:#1582 - 调用本机函数'POWER'中的参数计数不正确

标签: mysql latitude-longitude closest-points mysql-select-db


【解决方案1】:

试试这个:

     POWER(SIN((37.7907 – abs(dest.longitude))

EDIT2:

     SELECT *,3956 * 2 * ASIN(SQRT( POWER(SIN((122.4058 - abs(dest.latitude)) * pi()/180 / 2),2) + COS(122.4058 * pi()/180 ) * COS( abs(dest.latitude) * pi()/180) * POWER(SIN((37.7907 - abs(dest.longitude)) * pi()/180 / 2), 2) )) as dis FROM company as dest HAVING dis <10 ORDER BY dis limit 10;

【讨论】:

  • 我已经添加了,但是我得到这个错误:#1582 - 调用本机函数 'POWER' 中的参数计数不正确
  • 我改成这样:SELECT *,3956 * 2 * ASIN(SQRT( POWER(SIN((122.4058 - abs(dest.latitude)) * pi()/180 / 2),2 ) + COS(122.4058 * pi()/180 ) * COS( abs (dest.latitude) * pi()/180) * POWER(SIN((37.7907 - (dest.longitude)) * pi()/180 / 2 )), 2) )) as dis FROM company as dest where dis
  • 我想你的意思可能是abs(dest.longitude)
  • 我存储为 double ,但如果我选择 ,那么它可能是字符串!
  • 现在我改为: SELECT *,3956 * 2 * ASIN(SQRT( POWER(SIN((122.4058 - abs(dest.latitude)) * pi()/180 / 2),2 ) + COS(122.4058 * pi()/180 ) * COS( abs (dest.latitude) * pi()/180) * POWER(SIN((37.7907 - (dest.longitude)) * pi()/180 / 2 ), 2) )) as dis FROM company as dest where dis
【解决方案2】:

我复制了您的 sql 代码并将其放入具有语法高亮支持 (Sublime2) 的编辑器中,错误指向的字符(看起来像减号)实际上是另一个符号 ..

根据此网页,此字符称为 EN DASH(您可以在链接末尾的 utf8-hex-code 中看到它 :)) http://www.utf8-character.info/#!%E2%80%93

尝试用一个简单的减号替换这个字符。

【讨论】:

  • #1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“as dis
  • @smartgirl,删除“as dis”......我认为你不能在那里使用别名。如果你需要这个结果,你必须在查询的选择部分编写这个繁重的计算。
  • 我改成这样: SELECT *,3956 * 2 * ASIN(SQRT( POWER(SIN((122.4058 - abs( dest.latitude)) * pi()/180 / 2),2 ) + COS(122.4058 * pi()/180 ) * COS( abs (dest.latitude) * pi()/180) * POWER(SIN((37.7907 - dest.longitude) * pi()/180 / 2)) , 2) )) as dis FROM company as dest where dis
  • 但我收到此错误:#1582 - 调用本机函数 'POWER' 中的参数计数不正确
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-04
  • 2015-06-28
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多