当前位置: 首页 > 面试题库 >

SQL语法错误-Haversine公式

谢嘉
2023-03-14
问题内容

我正在尝试使用Haversine公式从WordPress数据库中获取最近的地点

我的表结构如下

posts

+--------------+
| Field        |
+--------------+
| ID           |
| post_author  |
| post_title   | 
| post_type    | 
+--------------+

postmeta

+--------------+
| Field        |
+--------------+
| meta_id      |
| post_id      |
| meta_key     |
| meta_value   |
+--------------+

并有记录与meta_keylatitudelongitude

SELECT p.ID, 
  p.post_title, 
  p.post_author,
  max(case when pm.meta_key='latitude' then pm.meta_value end) latitude,
  max(case when pm.meta_key='longitude' then pm.meta_value end) longitude
FROM `wp_posts` p
LEFT JOIN `wp_postmeta` pm
  on p.ID=pm.post_id 
WHERE p.post_type='place' 
  AND (pm.meta_key='latitude' OR pm.meta_key='longitude') 
GROUP BY p.ID, p.post_title, p.post_author
ORDER BY p.ID ASC

现在我想将以上查询合并到该问题的答案中

SELECT item1, item2, 
    ( 3959 * acos( cos( radians(37) ) 
                   * cos( radians( lat ) ) 
                   * cos( radians( lng ) 
                       - radians(-122) ) 
                   + sin( radians(37) ) 
                   * sin( radians( lat ) ) 
                 )
   ) AS distance 
FROM geocodeTable 
HAVING distance < 25 
ORDER BY distance LIMIT 0 , 20;

以下是通过组合查询

SELECT ID, 
  post_title, 
  post_author,
  max(case when meta_key='latitude' then meta_value end) latitude,
  max(case when meta_key='longitude' then meta_value end) longitude,
  ( 3959 * acos( cos( radians(18.204540500000) ) 
                   * cos( radians( latitude ) ) 
                   * cos( radians( longitude ) 
                       - radians(-66.450958500000) ) 
                   + sin( radians(18.204540500000 ) 
                   * sin( radians( latitude ) ) 
                 )
   ) AS distance 
FROM `wp_posts` 
LEFT JOIN `wp_postmeta` 
  on ID=post_id 
WHERE post_type='place' 
  AND (meta_key='latitude' OR meta_key='longitude') 
GROUP BY ID, post_title, post_author
ORDER BY ID ASC

但这会产生语法错误

#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 'AS distance FROM `wp_posts` LEFT JOIN `wp_postmeta` on ID=post_id WHERE po' at line 13

问题答案:

您错过了)第一个闭幕式sin()

( 3959 * acos( cos( radians(18.204540500000) ) 
                   * cos( radians( latitude ) ) 
                   * cos( radians( longitude ) 
                       - radians(-66.450958500000) ) 
                   + sin( radians(18.204540500000 ) ) /* <--- here */
                   * sin( radians( latitude ) ) 
              )
 ) AS distance

尽管很难从视觉上发现它,但我通过将您的代码复制到支持大括号匹配的文本编辑器中发现了这一点。强烈建议使用一种,如果不是用于查询开发和测试,则至少要用于调试



 类似资料:
  • 问题内容: 我想将此公式与php一起使用。我有一个保存了纬度和经度值的数据库。 我想在输入中具有一定的经度和纬度值的情况下,找到从该点到数据库中每个点的所有距离(以km为单位)。为此,我在googlemaps api上使用了公式: 当然在php中使用该值,我用radians替换了。值37,-122是我的input值,而lat,lng是我在数据库中的值。 下面是我的代码。问题是出了点问题,但我不明白

  • 问题内容: 我正在使用PHP创建一个MySQL调用,正在使用Haversine论坛计算距离: 我的问题是;最好用SQL进行所有这些计算吗?该查询搜索具有约1000条记录的表。用PHP而不是SQL进行一些数学运算会更有效吗?有没有更好的方法来优化此查询? 问题答案: 您使用的是余弦的球律公式,而不是Haversine公式(稍慢一些)。

  • 当我被处决时 < code > sqlcontext . SQL(" select * from logs where content like“% stream %”) 在我的spark应用程序中,错误显示如下: java.lang.RuntimeException:[1.39]失败:应为“`*”,但找到“%” 从日志中选择*,其中内容如%stream%^在Success.map$. error

  • 我正在运行以下SQL语法: 但不管用。我得到了这个错误: 错误1064(42000):您的SQL语法中有错误;查看与您的MySQL server版本相对应的手册,了解第1行“DISTINCT >”Number of Employees“FROM Hours”附近使用的正确语法 你能告诉我我在哪里做错了吗?对不起,我对MySQL和数据库不熟悉。

  • 问题内容: 我有一个MySQL命令: 当我运行它时,我得到一个错误: 问题答案: 是不是 您应该使用SQL工具来可视化可能出现的错误,例如 MySQL Workbench 。

  • 问题内容: 我正在尝试使用Haversine距离公式但是我无法使用它,请参见以下代码 错误是: 我知道这是因为它需要执行以下操作: 但是,当我将此放在函数下方时,它仍然返回相同的错误消息。如何使用助手方法?还是有其他方法可以对此进行编码?谢谢! 问题答案: 此代码有效: