我有一个带有2个对象x和z(有y,但没关系)的表,当我提供一组坐标时,我试图找到查找它们的最简单方法。

SELECT * FROM RegionName
WHERE (( "50" between RegionName.X1 and RegionName.X2 )
AND ( "-66" between RegionName.Z1 and RegionName.Z2 ))
OR (( "50" between RegionName.X2 and RegionName.X1 )
AND ( "-66" between RegionName.Z1 and RegionName.Z2 ))
OR (( "50" between RegionName.X2 and RegionName.X1 )
AND ( "-66" between RegionName.Z2 and RegionName.Z1 ))
OR (( "50" between RegionName.X1 and RegionName.X2 )
AND ( "-66" between RegionName.Z2 and RegionName.Z1 ))


现在我有了一些可行的方法,但是我知道应该有更好的方法来做到这一点。我试过没有x和z的所有组合,但是它并不总是有效,这就是我最终得到的结果。任何人都知道如何将其减少到2或3行。我尝试过(如下),但似乎没有用。

SELECT * FROM RegionName
WHERE ( "50" (between RegionName.X1 and RegionName.X2, between RegionName.X2 and RegionName.X1 ))
AND ( "-66" (between RegionName.Z1 and RegionName.Z2, between RegionName.Z2 and RegionName.Z1))


还是我只是想为自己做更多的工作?

最佳答案

使用空间索引,也称为R树。您可以使用SQL询问点(50,-66)是否在任何区域内。有关如何使用空间索引以及可用于查询它们的功能的信息,请参见此http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html

10-05 21:26