mysql - SQL:从给定的纬度和经度查找不同半径内的最近点
问题描述
到目前为止,我已经能够在同一半径内找到最近的点(本文中的仓库)。(已经有很多答案的常见问题)。
这是实际代码(它不使用多个半径)
$radius = 5; // miles
$q = "
SELECT DISTINCT
warehouse_latitude.post_id,
warehouse_longitude.meta_value as longitude,
warehouse_latitude.meta_value as latitude,
((ACOS(SIN($latitude * PI() / 180) * SIN(warehouse_latitude.meta_value * PI() / 180) + COS($latitude * PI() / 180) * COS(warehouse_latitude.meta_value * PI() / 180) * COS(($longitude - warehouse_longitude.meta_value) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS distance
FROM {$this->wpdb->postmeta} as warehouse_latitude
LEFT JOIN {$this->wpdb->postmeta} as warehouse_longitude ON warehouse_latitude.post_id = warehouse_longitude.post_id
WHERE warehouse_latitude.meta_key = 'warehouse_latitude' AND warehouse_longitude.meta_key = 'warehouse_longitude'
HAVING distance < $radius
ORDER BY distance ASC
LIMIT 1
";
反而 :
我想选择最近的点,但为每个点(仓库)定义了半径。
- A点(9714):半径5英里
- B点(9715):2英里半径
- C点(9716):10英里半径
因此,如果 B 点和 C 点在范围内且 B 点最近,则应选择 B 点。
wp_postmeta 表:
meta_id | post_id | meta_key | meta_value
------------------------------------------------------
324802 | 9714 | warehouse_latitude | 47.1978754
324809 | 9715 | warehouse_latitude | 47.2064462
324814 | 9716 | warehouse_latitude | 47.214434
324803 | 9714 | warehouse_longitude | -1.54441
324810 | 9715 | warehouse_longitude | -1.5461347
324815 | 9716 | warehouse_longitude | -1.565993
324806 | 9714 | warehouse_radius | 5
324811 | 9715 | warehouse_radius | 2
324816 | 9716 | warehouse_radius | 10
架构:
解决方案
不是答案。评论太长了……
1 LEFT JOIN warehouse_longitude ON ... -- This is an INNER JOIN because of LINE 3
2 LEFT JOIN warehouse_radius ON ... -- This is also an INNER JOIN, because of LINE 4
3 WHERE warehouse_longitude.meta_key = 'warehouse_longitude'
4 AND warehouse_radius.meta_key = 'warehouse_radius'
所以你不妨把这些写成 INNER JOIN 开始。
推荐阅读
- php - 如何在转换为 json 之前使用 carbon format() 格式化日期
- python - 如何计算从 pb 文件加载的张量流模型的触发器
- postgresql - 无法打开 Postgresql 的日志收集器
- python - 将 Sympy 表达式转换为包含 Mod 函数的 NumPy
- java - 如何在java中展平spark数据集中的包装数组
- google-app-engine - 为什么选择 Google Kubernetes Engine 而不是 Google AppEngine?
- python - 是否可以在 python 中创建一个带有空格的对象?
- microsoft-cognitive - 认知服务文本到语音中的错误(Raul,西班牙语中的 Apollo 语音)
- typescript - 在模块上找不到导出
- javascript - Javascript 中的异步生成器:产生 Promise 和产生等待的 Promise 之间有区别吗?