Php SQL:搜索二维正方形和圆形中最近的

Php SQL:搜索二维正方形和圆形中最近的,php,sql,search,2d,Php,Sql,Search,2d,我有一张桌子:分 它有两个字段:X,Y 每行代表2d字段上的一个点 我希望能够搜索半径为R的点,比如 并且是正方形的,有一个像 顺便说一句:我使用PHP访问我的数据库 我的主要观点是得到最接近图形点中心的结果,这是qqe-like中的第一个结果 在SQL中如何做这样的事情?从数学上讲,点在圆的统计方程中 (c.X-p.X)^2 + (c.Y-p.Y)^2 <= R^2 如果您的查询不是应用程序的核心,那么Gandjustas answer是一个不错的解决方案。如果这种地理/空间数据对您

我有一张桌子:分

它有两个字段:X,Y

每行代表2d字段上的一个点

我希望能够搜索半径为R的点,比如

并且是正方形的,有一个像

顺便说一句:我使用PHP访问我的数据库

我的主要观点是得到最接近图形点中心的结果,这是qqe-like中的第一个结果


在SQL中如何做这样的事情?

从数学上讲,点在圆的统计方程中

(c.X-p.X)^2 + (c.Y-p.Y)^2 <= R^2

如果您的查询不是应用程序的核心,那么Gandjustas answer是一个不错的解决方案。如果这种地理/空间数据对您非常重要,并且您在处理此类数据时需要速度,那么您应该研究RDBMS的地理空间扩展

我假设您使用mysql,您可以自行处理。 使用适当的数据类型和索引


和其他有用的功能。

我有点困惑。在前两张图片中,红点似乎是正方形和圆形的中心,但在第三张图片中不是。为什么会这样?+1表示图表,尽管内容与文本不匹配:参见最后一张图表-红点不是最靠近中心的!好的,第一个表达式是好的,第二个表达式不太应该是max。。。
max(abs(c.X-p.X),abs(c.Y-p.Y)) <= A/2
select top 1 p.X, p.X from Points p
otrder by ((@x - p.X)*(@x - p.X)+(@y - p.Y)*(@y - p.Y))