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

2 番目のクエリ:

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 に答える