mysql - 如何从多个表的坐标查询计算距离?
问题描述
我的应用程序需要搜索用户照片在其他表中的附近用户。下面是我的查询,但它会产生语法错误。
TABLE 1 (students)
student_id | name | latitude | longitude
----------------------------------------
1 | A | 34.xxxxxx | -118.xxxxxx
2 | B | 34.xxxxxx | -118.xxxxxx
3 | C | 34.xxxxxx | -118.xxxxxx
TABLE 2 (photos)
photo_id | student_id | photo | main
---------------------------------------------------
1 | 1 | apple.jpg | 1
2 | 1 | orange.jpg | 0
3 | 2 | cantaloupe.jpg | 1
4 | 1 | lemon.jpg | 0
SET @lat = 34.080318;
SET @lng = -118.239095;
SELECT s.student_id,s.name,s.latitude,s.longitude,p.photo,
( ACOS( COS( RADIANS( @lat ) )
* COS( RADIANS( s.latitude ) )
* COS( RADIANS( s.longitude ) - RADIANS( @lng ) )
+ SIN( RADIANS( @lat ) )
* SIN( RADIANS( s.latitude ) )
)
* 3959
) AS distance
FROM students s INNER JOIN photos p ON s.student_id = p.student_id
HAVING distance < 10
WHERE p.main=1 AND s.student_id=1
ORDER BY distance ASC;
解决方案
WHERE
和的HAVING
顺序错误:
SELECT s.student_id,s.name,s.latitude,s.longitude,p.photo,
( ACOS( COS( RADIANS( @lat ) )
* COS( RADIANS( s.latitude ) )
* COS( RADIANS( s.longitude ) - RADIANS( @lng ) )
+ SIN( RADIANS( @lat ) )
* SIN( RADIANS( s.latitude ) )
)
* 3959
) AS distance
FROM students s INNER JOIN photos p ON s.student_id = p.student_id
WHERE p.main=1 AND s.student_id=1
HAVING distance < 10
ORDER BY distance ASC;
顺便说一句,这使用了关于该HAVING
子句的 MySQL 扩展。在大多数数据库中,您将使用子查询。
推荐阅读
- python - 从距离和日期时间数据创建新的速度列
- python - Selenium Python 在获取谷歌评论时无法向下滚动
- r - 基于 ggplot 中的 x 轴变量的箱线图中的颜色值
- c# - 在 C# .NET Framework 中使用 ConfigurationBuilder 我的应用服务设置到哪里去了?
- c - 需要为 __alignof__ 调试符号
- statistics - 组合统计集
- java - 将键值映射到 Java 8 流中的对象
- c# - 实体框架相关数据外键
- python - 计算python数据框中一列的Z分数
- android - 用于条带集成的 Firebase 计划付款