我的网格从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))
它不会给我任何错误或结果,我将如何解决这个问题?任何指导或指向正确的方向将不胜感激。
提前致谢!
答案 0 :(得分:1)
您的第二个问题:
SELECT * FROM map WHERE ((xaxis >= 795 AND xaxis <= 10) AND (yaxis >= 795 AND yaxis <= 10))
不会给你任何结果,因为xaxis不能是&gt; = 795和&lt; = 10(同样是yaxis)。
要环绕,您需要使用余数或模数函数 - 例如:
SELECT * FROM map WHERE ((MOD(799,xaxis-1)>0 AND xaxis <= 10) AND (MOD(799,yaxis-1)>0 AND yaxis <= 10))
答案 1 :(得分: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 )