我有一个包含两个字段ip_start
和ip_end
的表,我想找到这两个字段之间具有给定ip地址的记录。
假设表格如下:
ip_start ip_end other data
123 778 xxx
500 800 yyy
我想找到400的记录。如果我说select * from table where 400 <= ip_end
,我会得到两个记录。如果我说select * from table where 400 between ip_start and ip_end
,我会得到两者。
我想要的是&#34; 400之间的ip_start和ip_end以及ip_start最接近ip_end&#34;。但当然没有这样的问题。
有什么想法吗?
答案 0 :(得分:0)
“ip_start和ip_end之间的400和ip_start最接近ip_end”
SELECT * FROM table WHERE ip_end >= 400 and ip_start <= 400
ORDER BY ip_end - ip_start
这意味着:
如果您只想要一条记录,请在末尾添加LIMIT 1
答案 1 :(得分:0)
你只需要在where子句中有两个约束,按顺序需要。
select * from yourtable where ip_end >= 400 and ip_start <= 400
ORDER BY (ip_end - ip_start);
答案 2 :(得分:0)
您的第一个查询不包含ip_start列,因此它返回表中具有ip_end&lt; = 400的所有条目。您需要添加其他约束。
试试这个:
SELECT * FROM table
WHERE(
ip_start >= 400 AND
ip_end <= 400
)
答案 3 :(得分:0)
如果你想要你的ip成员使用的最小ip范围。
SELECT *
FROM table
WHERE 400 >= ip_start AND 400 <= ip_end
ORDER BY ip_end - ip_start ASC
LIMIT 1
将找到您的ip所属的所有范围,按最小范围排序并将查询限制为单个记录。