作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
这里我要计算的是位置之间的距离,计算完后后面的数据只会显示距离最小的。但我很困惑如何根据以下数据进行制作:
这是我的 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
有人告诉我我需要在我的代码中改进什么,这样它才能像我想要的那样工作吗?谢谢圭
-
最佳答案
这是从元数据中获取纬度和经度的方法:
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 表示经度)从同一个表中检索相同记录的数据并将其连接两次。
希望对您有所帮助。
关于javascript - 如何计算经纬度的距离并在php中选择最短距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41479249/
Hackerrank - Dijkstra 最短距离 2 我被卡在了 TestCase 7(我唯一失败的一个),我认为这是我的错。我下载了测试用例并检查了我生成的输出。 我执行 git diff,我看
我是一名优秀的程序员,十分优秀!