2016-04-01 20 views
1

私は、次の表があります。MySQLのクエリは、最大値と最小値を制限する

INSERT INTO `test_table` (`id`, `x`, `y`) VALUES (1, 0, 10), (2, 6, 10), 
    (3, 9, 10), (4, 2, 9), (5, 4, 9), (6, 3, 8), (7, 7, 8), (8, 9, 8), 
    (9, 0, 7), (10, 2, 7), (11, 5, 7), (12, 10, 7), (13, 2, 6), (14, 7, 6), 
    (15, 0, 5), (16, 4, 5), (17, 9, 5), (18, 1, 4), (19, 3, 4), (20, 5, 4), 
    (21, 10, 4), (22, 8, 3), (23, 3, 2), (24, 6, 2), (25, 2, 1), (26, 8, 1), 
    (27, 0, 0), (28, 5, 0), (29, 6, 0), (30, 10, 0); 

をし、それは以下の画像を表す:

enter image description here

赤やピンク、細胞内の数字が表すの "これらのセルの座標は「x」および「y」である。

私がしなければならないことは、灰色の四角形内の10個のセルを除くすべてのセル(赤いセルのみ)を表示するためのクエリを出すことだけです。

SELECT * FROM `test_table` WHERE 
    x between 0 and 10 and 
    x not between 2 and 8 and 
    y between 0 and 10 and 
    y not between 2 and 7 
    order by id ASC 
    LIMIT 30 

グリッドが怒鳴る0と両方向(画像に表示されない)で10を超えていることを想像;:

は、これまでのところ私は、これは持っていますクエリの制限が多すぎる必要があります。とにかく、出力は、私が隅(緑色の領域内のもの)のセルを与えるだけなので、出力は必要ありません。

もう1つの方法はこのクエリを減算することです:この1から

SELECT * FROM `test_table` WHERE 
    x between 2 and 8 and 
    y between 2 and 7 
    order by id ASC 
    LIMIT 30 

SELECT * FROM `test_table` WHERE 
    x between 0 and 10 and 
    y between 0 and 10 
    order by id ASC 
    LIMIT 30 

...しかし、もう一度。私はそれを行うことができません:(

答えて

1

それはちょうどx[2:8],y[2,7]を除外するために必要

この試してみてください。ただ、他の「側」の制限を追加する

SELECT * FROM `test_table` 
WHERE NOT(x between 2 and 8 AND y between 2 and 7); 
+0

ありがとう、私の人生を救う!私はそれが本当に簡単なものだったことを知っていた! – cronos

0

を、最後のクエリは、次のように実装されました。 :

SELECT * FROM 
`test_table` WHERE 
x between 0 and 10 and 
y between 0 and 10 and 
not 
(x between 2 and 8 and 
y between 2 and 7) 
関連する問題