mySQL - 环绕数字

时间:2012-05-24 22:34:26

标签: mysql database

我的网格从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))

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

提前致谢!

2 个答案:

答案 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 )