0

我有一个从 0,0 到 799,799(800x800 块)的网格。我遇到的问题,我无法解决这个问题,指导或帮助提示会很棒。只要它在规定的网格内,我就可以获得结果,但是当涉及到环绕网格时,它不会给我结果。

即(这会给我没有问题的结果):

SELECT * FROM map WHERE ((xaxis >= 0 AND xaxis <= 10) AND (yaxis >= 0 AND yaxis <= 10))

如果我尝试(环绕网格):

SELECT * FROM map WHERE ((xaxis >= 795 AND xaxis <= 10) AND (yaxis >= 795 AND yaxis <= 10))

它不会给我任何错误或结果,我将如何解决这个问题?任何指导或指向正确的方向将不胜感激。

提前致谢!

4

2 回答 2

1

您的第二个查询:

SELECT * FROM map WHERE ((xaxis >= 795 AND xaxis <= 10) AND (yaxis >= 795 AND yaxis <= 10))

不会给你任何结果,因为 xaxis 不能 >= 795 和 <= 10(同样 yaxis)。

要环绕,您需要使用余数或模数函数 - 例如:

SELECT * FROM map WHERE ((MOD(799,xaxis-1)>0 AND xaxis <= 10) AND (MOD(799,yaxis-1)>0 AND yaxis <= 10))
于 2012-05-24T22:46:22.420 回答
0

在其他人的帮助下找到了答案,我把图放在这里,这样有人可以从中受益:

$input_left_x     = (($XCoord - $Miles + 800) % 800);
$input_right_x    = (($XCoord + $Miles) % 800);
$input_left_y     = (($YCoord - $Miles + 800) % 800);
$input_right_y    = (($YCoord + $Miles) % 800);

SELECT * FROM map
WHERE MOD( xaxis - COALESCE(".$input_left_x." , 0) + 800 , 800 )
BETWEEN 0 AND MOD( COALESCE(".$input_right_x." , 799) - COALESCE(".$input_left_x." , 0) + 800 , 800 )
AND MOD( yaxis - COALESCE(".$input_left_y." , 0) + 800 , 800 )
BETWEEN 0 AND MOD( COALESCE(".$input_right_y." , 799) - COALESCE(".$input_left_y." , 0) + 800 , 800 )
于 2012-06-02T00:40:07.787 回答