2012-01-29 81 views
0

我有一個表,有2列,可樂和colb,代表一個數字範圍。多列的範圍

例問題:

cola - colb 
1 - 10 
11 - 22 
33 - 66 
67 - 67 
  • 如果輸入是7-8,我想的查詢,將提取範圍1-10。
  • 如果輸入的是67 - 80,我想一個查詢,將提取67 - 67

例子查詢:

SELECT * 
    FROM example 
WHERE vala >= cola 
    AND valb <= colb 

第一個標準與上述查詢的偉大工程,但它下降下來的時候可樂= COLB即.. 67 - 67


以上是我的問題的一個簡單的例子。該問題實際上由IPS的範圍。 Cola - Colb2 = IP範圍。在上面的例子中,我已經包含了一些情況。

SELECT * 
    FROM `static_allocation` 

    WHERE INET_ATON('$network_addr') >= INET_ATON(network_addr) 
     AND INET_ATON('$broadcast_addr') <= INET_ATON(broadcast_addr) 

    LIMIT 1 

編輯:

OK,看來我是稍有不妥..

表數據

10.0.0.0 - 10.0.0.15 
10.0.0.16 - 10.0.0.16 

然而,當我嘗試和選擇10.0.0.16 - 10.0.0.20,這不是」 t找到記錄..

+0

這是沒有意義的我。 – 2012-01-29 19:50:36

+0

是不是因爲valb是80並且不小於或等於67? – TigOldBitties 2012-01-29 19:53:11

+0

我認爲這個問題是關於IP範圍的。 192.1.1.5的網絡地址是192.1.1.0,它的廣播地址是192.1.1.255 @TigOldBitties:錯過了80有 – Andomar 2012-01-29 19:53:48

回答

1

如果你正在尋找至少包含塊的部分即第範圍,嘗試像一個條件:

vala <= colb and cola <= valb 

這是說搜索範圍[vala,valb]必須部分地與目標範圍[cola,colb]重疊。

在SQL:

select * 
from example 
where vala <= colb and cola <= valb 
order by 
     cola -- Lowest network range 
limit 1 
+0

真棒解決方案..謝謝你..非常有幫助.. .. – Lee 2012-01-29 20:10:38