2012-01-29 86 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