本地IP:192.168.1.17
查询数据库中与本地IP相似的记录并排序
1、先查询出192.168.1.*
2、其次是192.168.*.*
3、....:192.*.*.*
.......

解决方案 »

  1.   

    把IP保存为10进制在数据库中,然后查询条件IP>=10进制(192.168.1.0) AND IP<=10进制(192.168.1.255)
      

  2.   

    建议查询的部分用sql,排序的部分用php
    先用
    select * from `table` where ip regexp "^192\.[0-9]+\.[0-9]+\.[0-9]+$"
    把符合条件的ip取出来
    我给你写个例子:$a = array(
    '192.168.5.23',
    '192.168.5.32',
    '192.101.1.3',
    '192.168.1.3',
    '192.235.61.3',
    );$p = '192.168.1.17';foreach ($a as $v){
    $arr[$v] = abs(ip2long($v)-ip2long($p));
    }asort($arr);
    $res = array_flip($arr);print_r ($res);
      

  3.   

    思路是ip2long之后计算差值,用差值作为相似度依据
      

  4.   


    按照什么排序?
    用like不就行了吗?
      

  5.   

    $pregIP = '192.168.1.17';
    $a = explode(".",$pregIP);
    $like = $a[0].".";
    echo $like;
    $sql = "select ip from `table` where ip like '".$like."%'";
    $result = mysql_query($sql);
    while($row = mysql_fetch_ASSOC($result))
    {
    $IP_array[] = $row['ip'];
    }
    foreach ($IP_array as $v){
        $arr[abs(ip2long($v)-ip2long($pregIP))] = $v;
    }
    ksort($arr);
    print_r ($arr);