2016-04-01 24 views
1

aşağıdaki tablo vardır:MySQL sorgusu maximums ve minimum sınırlamak için

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); 

ve aşağıdaki resim temsil:

enter image description here

kırmızı veya pembe hücrelerdeki sayıların gösterdiği " id "ve bu hücrelerin koordinatları" x "ve" y "dir. Tek yapmam gereken, gri hücrede 10 hücreyi hariç tutarak tüm hücreleri (yalnızca kırmızı olanları) göstermek için bir sorgu oluşturmaktır.

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 

ızgara feryat 0 ve her iki yönde (resimde gösterilmiyor) 10 ötesindedir hayal edilmesi;:

Şimdiye kadar bu var Sorgu çok fazla limite sahip olmalıdır. Her neyse, çıktı istediğim şey değil çünkü sadece köşelerde (yeşil alanlar içinde olanlar) hücreleri veriyor: 1, 3, 8, 27 ve 30

Bu sorguyu çıkarmak için başka bir yaklaşım olacaktır:

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

:

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

... ama yine; ben sadece x[2:8],y[2,7] hariç tutması gerekir

cevap

1

:(yapmak alamıyorum

bu deneyin:

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

Çok teşekkürler, hayatımı kurtardın! Gerçekten basit bir şey olduğunu biliyordum! – cronos

0

Hemen öteki "tarafı" sınırlarını eklemek için; nihai sorgu böyle hayata geçirildi. :

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) 
İlgili konular