我有一个包含2列的表,可乐和colb,它们代表一系列数字。
示例问题:
cola - colb
1 - 10
11 - 22
33 - 66
67 - 67
示例查询:
SELECT *
FROM example
WHERE vala >= cola
AND valb <= colb
第一个标准适用于上述查询,但是当cola = colb即67-67时,它就会失效。
以上是我的问题的一个简单示例..问题实际上是一系列Ips。 可乐 - 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
编辑:
好的,看起来我有点不对..
表格数据
10.0.0.0 - 10.0.0.15
10.0.0.16 - 10.0.0.16
然而,当我尝试选择10.0.0.16 - 10.0.0.20
时,它找不到记录..
答案 0 :(得分: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