在MySQL中将IP转换为Long

Mac*_*lor 5 php mysql

我正在尝试使用该ip2country表来显示我网站上用户的国家标志.

我想出的最简单的事情是编写一个SQL语句,该语句从会话表中获取用户并查询它们各自的IP是否在某个范围内以确定其国家/标志.

这很简单但也很危险,因为当有300个在线用户显示并从会话表中获取它们时,查询他们的国家/地区以显示标志,肯定会有大量内存使用.

现在我尝试在一个查询中执行此操作:

SELECT 
  s.session_ip, 
  ipc.*
FROM 
  session AS s
    LEFT JOIN ip2country AS ipc 
    ON ipc.ip_lo <= s.session_ip AND ipc.ip_hi >= s.session_ip
WHERE 
  s.session_time  > '".( time() - 60) )."' 
Run Code Online (Sandbox Code Playgroud)

现在很清楚,上面的查询是错误的,因为ip2country表中保存的IP 是一个整数,例如1000013824,存储在会话表中的IP是IP的字符串表示,例如193.169.0.0

我知道如何用PHP将IP转换为long ip2long(),但MySQL中是否有任何等效的方法,所以我不需要做两个查询?

Mik*_*man 31

SELECT INET_NTOA(1000013824) - > 59.155.0.0

SELECT INET_ATON('193.169.0.0') - > 3249078272

请享用 :)

  • 如何尝试看看会发生什么? (2认同)