Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 需要对同一个表上具有多个联接的SQL查询执行数学运算_Php_Mysql_Sql_Wordpress - Fatal编程技术网

Php 需要对同一个表上具有多个联接的SQL查询执行数学运算

Php 需要对同一个表上具有多个联接的SQL查询执行数学运算,php,mysql,sql,wordpress,Php,Mysql,Sql,Wordpress,我使用WordPress来定制字段,它基本上有一个meta_键列和一个wp_postmeta表中的meta_值列,我用它来存储meta_键经度和纬度,其中一个meta_值是24.3和76.2 现在我需要从Php查询数据库,从用户位置在10公里半径内找到附近的健身房。我正在使用以下查询: SELECT pm1.meta_value AS longitude, pm2.meta_value AS l

我使用WordPress来定制字段,它基本上有一个
meta_键
列和一个
wp_postmeta
表中的
meta_值
列,我用它来存储
meta_键
经度和纬度,其中一个
meta_值
是24.3和76.2

现在我需要从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
选择
pm1.meta_值作为经度,
pm2.meta_值作为纬度,
ACOS(SIN(弧度(pm2.meta_值))*SIN(弧度($user_lat))+COS(弧度(pm2.meta_值))
*COS(弧度($user\u lat))*COS(弧度(pm1.meta\u值)-弧度($user\u lng))*$earth\u半径作为距离
从'wp_Posteta`pm1
内部连接'wp_postmeta`pm1上的pm2.post_id=pm2.post_id
哪里
pm1.meta_key='经度'
和pm2.meta_key='纬度'
和ACOS(SIN(弧度(pm2.meta_值))*SIN(弧度($user_lat))+COS(弧度(pm2.meta_值))
*COS(弧度($user\u lat))*COS(弧度(pm1.meta\u值)-弧度($user\u lng))*$earth\u半径<10
其中,
$user\u lat
$user\u lng
是表示用户位置的Php变量。这不管用。语法似乎正确,但计算的距离不正确。我从中得到了这个问题的灵感

我做错了什么



更新:上述代码有效。我犯了一个非常愚蠢的错误。上面的代码对于那些面临相同问题的人来说是一个很好的资源,因为
经度
纬度
字段没有明确定义,例如在默认的WordPress自定义字段表布局中。

你不能只计算每个健身房和用户位置之间的距离吗,然后返回距离的值,你不能只计算每个健身房和用户位置之间的距离,然后返回距离为mysql或sql server的值吗?这是一个mysql服务器,很抱歉标记错误。我不认为6371代表km。你得到的是太多还是两行?mysql还是sql server?这是一个mysql服务器,很抱歉错误的标记我不认为6371代表km。你得到的是太多还是两行?顺便说一句,这个公式不适用于经度和纬度。。。比这更复杂…是的,我刚刚意识到距离公式是不同的,因为地球的曲率。也许你找到的公式不正确。是的,也许是因为无论我做什么,距离都不正确。即使在我的新问题中,$earth_radius的值是多少?我只是用我的坐标测试了它,得到了正确的距离。检查你的坐标。顺便说一句,这个公式不适用于经度和纬度。。。比这更复杂…是的,我刚刚意识到距离公式是不同的,因为地球的曲率。也许你找到的公式不正确。是的,也许是因为无论我做什么,距离都不正确。即使在我的新问题中,$earth_radius的值是多少?我只是用我的坐标测试了它,得到了正确的距离。检查你的坐标。