我意识到这可能是一个效率低下的查询,但我正在尝试从连接到帖子的post\\u元表中获取纬度和经度值,以计算帖子与特定纬度和经度的接近程度。
精确定位为36.555555139.731111
我提出了以下问题,(基于帖子here) 但我调试它有困难。
SELECT ID, (
6371 * acos (
cos ( radians(36.555555 )
* cos( radians( CAST(latitude.meta_value AS DECIMAL) ) )
* cos( radians( CAST(longitude.meta_value AS DECIMAL)) - radians(139.731111) )
+ sin ( radians(36.555555 )
* sin( radians( CAST(latitude.meta_value AS DECIMAL) ) )
)
) AS distance
FROM $wpdb->posts
INNER JOIN $wpdb->postmeta latitude
ON (ID = latitude.post_id AND latitude.meta_key = \'place_latitude\')
INNER JOIN $wpdb->postmeta longitude
ON (ID = longitude.post_id AND longitude.meta_key = \'place_longitude\')
HAVING distance < 20
ORDER BY distance
LIMIT 0,6
我得到的错误是标准
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 \'FROM wp_posts INNER JOIN wp_postmeta latitude ON (ID = latitude.post_id\' at line 10
我不确定问题是在连接逻辑中还是在距离计算公式中。我之所以使用CAST,是因为我认为MySQL在字符串类型上运行数学函数可能会有问题。无论是否强制转换,错误都是相同的。
感谢您的指导!
最合适的回答,由SO网友:shadylane 整理而成
哦,天哪,这是非常明显的-有一个缺少的结束括号
这是工作查询。
SELECT ID, (
6371 * acos (
cos ( radians( 35.665833 ) )
* cos( radians( latitude.meta_value ) )
* cos( radians( longitude.meta_value ) - radians( 139.731111 ) )
+ sin ( radians(35.665833 ) )
* sin( radians( latitude.meta_value ) )
)
) AS distance
FROM $wpdb->posts
INNER JOIN $wpdb->postmeta latitude
ON (ID = latitude.post_id AND latitude.meta_key = \'place_latitude\')
INNER JOIN $wpdb->postmeta longitude
ON (ID = longitude.post_id AND longitude.meta_key = \'place_longitude\')
HAVING distance < 30
ORDER BY distance
LIMIT 0,6;