我有一个包含 2 列的表格,cola 和 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
第一个条件对于上面的查询非常有效,但是当 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
时,它找不到记录..
最佳答案
如果您正在查找至少包含 block 的一部分的第一个范围,请尝试以下条件:
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
关于mysql - 多列范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9056169/