表结构如下:begin_ip           end_ip                 add1            add2
------------------------------------------------------------------------
194.77.0.0         194.77.255.255         德国            无具体地点
194.78.99.80       194.78.99.95           比利时          BOSTON UNIVERSITY
......初涉mysql,求一存储过程,根据传入的IP,找出对应的地址(add1+add2),表中begin_ip表示起始IP,end_ip表示终止IP ,两者组成一个IP段。
比如传入的是 194.77.0.123,那么返回值就是 “德国 无具体地点”,如果传入的是 194.78.99.85 那么返回值是 “比利时BOSTON UNIVERSITY”,如果传入的IP没找到,就返回“暂无此IP信息”
不知道我的表述是否清楚,还请各位高手赐教!谢谢

解决方案 »

  1.   

    在MYSQL中不需要用存储过程,直接用SQL语句加上MYSQL的内置函数就行了。mysql> select * from t_yyhakusu;
    +--------------+----------------+--------+------------+
    | begin_ip     | end_ip         | add1   | add2       |
    +--------------+----------------+--------+------------+
    | 194.77.0.0   | 194.77.255.255 | 德国   | 无具体地点 |
    | 194.78.99.80 | 194.78.99.95   | 比利时 | BOSTON     |
    +--------------+----------------+--------+------------+
    2 rows in set (0.11 sec)mysql>
    mysql> select * from t_yyhakusu
        -> where INET_ATON('194.78.99.85') between INET_ATON(begin_ip) and INET_ATON(end_ip);
    +--------------+--------------+--------+---------+
    | begin_ip     | end_ip       | add1   | add2    |
    +--------------+--------------+--------+---------+
    | 194.78.99.80 | 194.78.99.95 | 比利时 | BOSTON  |
    +--------------+--------------+--------+---------+
    1 row in set (0.11 sec)mysql>
      

  2.   

    这些函数 是capi函数吧 底层都实现了 其实我们也可以自己实现 
      

  3.   

    这个我ip和地区的表我用过,你就把ip字段补充完整,如“210.251.089.120 210.251.089.127 日本 Iwatani College of Business”,然后在第一列上建立索引,速度还是很快的,我的表的长度是33万多,速度能接受。