MySQL的。查找值之间有两个字段的记录

时间:2014-11-07 19:43:51

标签: php mysql

我有一个包含两个字段ip_startip_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;。但当然没有这样的问题。

有什么想法吗?

4 个答案:

答案 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

这意味着:

  1. ip_end大于400
  2. ip_start小于400
  3. 你关心ip_end和ip_start(减法)之间的区别
  4. 如果您只想要一条记录,请在末尾添加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所属的所有范围,按最小范围排序并将查询限制为单个记录。

http://sqlfiddle.com/#!2/0e63a0/2