[英]SQL - how to perform an intersection on the same table (with a subquery) using joins?
[英]Need to perform mathematical operation on SQL query with multiple joins on same table
我使用WordPress的自定义字段,它基本上有一个meta_key
列和meta_value
列wp_postmeta
表,我使用的存储meta_keys
“经度”和“纬度”与meta_values
一个说,24.3和76.2 post_id
型“健身房'。
现在,我需要从Php中查询数据库,以从半径10公里以内的用户位置查找附近的体育馆。 我正在使用以下查询:
SELECT
pm1.meta_value AS longitude,
pm2.meta_value AS latitude,
ACOS( SIN( RADIANS( pm2.meta_value ) ) * SIN( RADIANS( $user_lat ) ) + COS( RADIANS( pm2.meta_value ) )
* COS( RADIANS( $user_lat )) * COS( RADIANS( pm1.meta_value ) - RADIANS( $user_lng )) ) * $earth_radius AS distance
FROM `wp_postmeta` pm1
INNER JOIN `wp_postmeta` pm2 ON pm1.post_id = pm2.post_id
WHERE
pm1.meta_key = 'longitude'
AND pm2.meta_key = 'latitude'
AND ACOS( SIN( RADIANS( pm2.meta_value ) ) * SIN( RADIANS( $user_lat ) ) + COS( RADIANS( pm2.meta_value ) )
* COS( RADIANS( $user_lat )) * COS( RADIANS( pm1.meta_value ) - RADIANS( $user_lng )) ) * $earth_radius < 10
其中$user_lat
和$user_lng
是表示用户位置的Php变量。 这不起作用。 语法似乎正确,但计算出的距离却不正确。 我从谷歌地图和mysql的半径搜索中获得了查询的灵感
我究竟做错了什么?
更新:上面的代码有效。 我犯了一个非常愚蠢的错误。 上面的代码对于面临相同问题的人们来说是一个很好的资源,在这些问题中, longitude
和latitude
字段没有明确定义,例如在默认的WordPress自定义字段表布局中。
您不能只计算每个健身房与用户位置之间的距离,然后返回距离<= 10km的距离吗?
例如:
用户坐标=(7,2)
Gym1坐标=(2,4)
Gym2坐标=(10,3)
...
距离1 = sqrt((7-2)^ 2 +(2-4)^ 2)
距离2 = sqrt((7-10)^ 2 +(2-3)^ 2)
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.