我正在尝试使用该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
请享用 :)
| 归档时间: |
|
| 查看次数: |
9903 次 |
| 最近记录: |