这里我要计算位置之间的距离,计算后的数据将只显示最小距离。但我很困惑如何根据以下数据制作:
这里是我的wp_postmeta:
这里是我的代码:
<?php
$latitude = "23.139422";
$longitude = "-82.382617";
mysql_query( 'SELECT ( 3959 * acos( cos( radians( '.$latitude.' ) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians( '.$longitude.' ) ) + sin( radians( '.$latitude.' ))
* sin( radians( latitude ) ) ) )
AS distance from wp_posts
HAVING distance <= 100
ORDER BY distance ASC'
)
我不知道如何通过id post_id
有人告诉我在我的代码中需要什么,所以它可以像我想要的那样工作吗?谢谢kyu
-
答案 0 :(得分:1)
这是你从meta获得纬度和经度的方法:
SELECT wp_posts.ID, pm1.meta_value, pm2.meta_value
FROM wp_posts
LEFT JOIN wp_postmeta AS pm1
ON pm1.post_id = wp_posts.ID
AND pm1.meta_key = 'latitude'
LEFT JOIN wp_postmeta AS pm2
ON pm2.post_id = wp_posts.ID
AND pm2.meta_key = 'longitude';
如果我们尝试将此应用于您的SQL语句(假设您的配方正在运行):
SELECT ( 3959 * acos(cos( radians( '.$latitude.' ) ) * cos( radians( pm1.meta_value))
* cos( radians( pm2.meta_value ) - radians( '.$longitude.' ) )
+ sin( radians( '.$latitude.' ))
* sin( radians( pm1.meta_value) ) ) ) AS distance
FROM wp_posts
LEFT JOIN wp_postmeta AS pm1
ON pm1.post_id = wp_posts.ID
AND pm1.meta_key = 'latitude'
LEFT JOIN wp_postmeta AS pm2
ON pm2.post_id = wp_posts.ID
AND pm2.meta_key = 'longitude'
HAVING distance <= 100
ORDER BY distance ASC;
它可能看起来很复杂,但如果你仔细观察第一个,那就不是了。它应该帮助您了解如何通过使用不同的别名(pm1表示纬度,pm2表示经度)从同一表中检索同一记录的数据,并将其连接两次。
希望它有所帮助。