我现在有2个数据表,一个rj_ip 表 存的是 QQ纯真转存进MYSQL 的数据内容 有5个字段.UID,STARTIP,ENDIP,COUNTRY,LOCAL 一个表是rj_ipdata 放的是来访者的IP 有3个字段 UID,IP,DATA 我现在想通过 rj_ipdata 里的IP 字段 然后查询 RJ_IP表 里的 IP字段 和想对应的城市,和地址 SELECT * FROM rj_ipdata AS rj_d INNER JOIN rj_ip WHERE rj_d.IP>rj_ip.STARTIP AND rj_d.IP<rj_ip.ENDIP 这段时间没有怎么写SQL,都是在做.NET,用的nhibernate,如果上面的不正确,你可以把inner 改成 outner(不知道是不是这么写,如果不正确,找一下手册吧) 思路就是这样了,也没有什么难的.
function flyip(str) if isnull(str) or str="" then flyip="xxx" else flyip=str str1=left(flyip,instr(flyip,".")-1) flyip=mid(flyip,instr(flyip,".")+1) str2=left(flyip,instr(flyip,".")-1) flyip=mid(flyip,instr(flyip,".")+1) str3=left(flyip,instr(flyip,".")-1) str4=mid(flyip,instr(flyip,".")+1) flyip=cint(str1)*256*256*256+cint(str2)*256*256+cint(str3)*256+cint(str4)-1 end if end function 这个函数是先把ip库里的ip按规律转换成数字,方便查询,就是先读下 修改 在保存数字 示例:<%=flyip(rs("beginIP"))%> function ipfly(str) if isnull(str) or str="" then ipfly="xxx" else
ipfly=flyip(str) flysql="select * from [444] where beginip<="&ipfly&" and endip>="&ipfly set flyrs=flyconn.execute(flysql) if not flyrs.eof then ipfly=flyrs("address") else ipfly=ipfly&"未知IP"&str end if flyrs.close set flyrs=nothing
end if end function 这个是查ip 的 示例:<%=ipfly(rs("Add_IP"))%>自己写的 ip数据库里有30W条记录 速度比较慢 lz可以去下个51la精简版的3W条左右你可以先用flyip把ip库里的没一个ip包括beginip endip都转下 之后用ipfly查询
2个UID 没关系..rj_IP 是存放IP 的UID
rj_ipdata 是存放来访者的UID rj_ipdata 开始是空数据表 有一个来访者访问就把IP地址存放进数据表,然后查询的时候从这个数据表里取IP地址然后在对比RJ_IP 数据表取 相对应的国家和地区然后在显示出来...是这样的
第二部:将ip转成库中相同的格式,比如:如果库中是xxx.xxx.xxx.xxx
如客户的数是120.2.3.7之类的,要补齐
第三步:从$ip中截取和库中查询相对应的IP段
第四步:根据相关IP段查询库中对应的城市和地区
有5个字段.UID,STARTIP,ENDIP,COUNTRY,LOCAL 一个表是rj_ipdata 放的是来访者的IP
有3个字段 UID,IP,DATA 我现在想通过 rj_ipdata 里的IP 字段 然后查询 RJ_IP表 里的 IP字段 和想对应的城市,和地址 SELECT * FROM rj_ipdata AS rj_d INNER JOIN rj_ip WHERE rj_d.IP>rj_ip.STARTIP AND rj_d.IP<rj_ip.ENDIP
这段时间没有怎么写SQL,都是在做.NET,用的nhibernate,如果上面的不正确,你可以把inner 改成 outner(不知道是不是这么写,如果不正确,找一下手册吧) 思路就是这样了,也没有什么难的.
function flyip(str)
if isnull(str) or str="" then
flyip="xxx"
else
flyip=str
str1=left(flyip,instr(flyip,".")-1)
flyip=mid(flyip,instr(flyip,".")+1)
str2=left(flyip,instr(flyip,".")-1)
flyip=mid(flyip,instr(flyip,".")+1)
str3=left(flyip,instr(flyip,".")-1)
str4=mid(flyip,instr(flyip,".")+1)
flyip=cint(str1)*256*256*256+cint(str2)*256*256+cint(str3)*256+cint(str4)-1
end if
end function
这个函数是先把ip库里的ip按规律转换成数字,方便查询,就是先读下 修改 在保存数字
示例:<%=flyip(rs("beginIP"))%>
function ipfly(str)
if isnull(str) or str="" then
ipfly="xxx"
else
ipfly=flyip(str)
flysql="select * from [444] where beginip<="&ipfly&" and endip>="&ipfly
set flyrs=flyconn.execute(flysql)
if not flyrs.eof then
ipfly=flyrs("address")
else
ipfly=ipfly&"未知IP"&str
end if
flyrs.close
set flyrs=nothing
end if
end function
这个是查ip 的
示例:<%=ipfly(rs("Add_IP"))%>自己写的 ip数据库里有30W条记录 速度比较慢
lz可以去下个51la精简版的3W条左右你可以先用flyip把ip库里的没一个ip包括beginip endip都转下
之后用ipfly查询
asp的
lz改下...
这个好像只有ac的数据库可以
SQL的int支持不了转换后那么大的数