为了账号安全,请及时绑定邮箱和手机立即绑定

如何在mysql查询中运行php函数?

如何在mysql查询中运行php函数?

PHP
holdtom 2021-10-22 15:19:04
我使用 ip2location lite 的 ip 跟踪数据库为我的站点创建了一个管理员窗口,以便我可以查看来自哪个国家/地区的 ips。这个页面加载速度非常慢,因为我必须在每个页面加载时执行超过 26 个数据库请求,所以我希望我可以使用 1 个查询来完成此操作,也许使用 mysql INNER JOIN。phpfunction Dot2LongIP ($IPaddr) {  $ips = explode(".", $IPaddr);  return ($ips[3] + $ips[2] * 256 + $ips[1] * 256 * 256 + $ips[0] * 256 * 256 * 256);}$mysql = new mysqli("localhost", "username", 'password', "db_name");if ($mysql->connect_errno) {  printf("Connect failed: %s\n", $mysql->connect_error);}$mysql->set_charset ("utf8");$result = $mysql->query("SELECT id,tid,ip,useragent,time,lang,page_s FROM access_logs ORDER BY id DESC LIMIT 25";    while($log = $result->fetch_row()){     $ip = $log[2];     get_ipinfo($ip);    }function get_ipinfo($ip){        $s_ip = Dot2LongIP($ip);        $mysql = new mysqli("localhost", "username", 'password', "db_name");        if ($mysql->connect_errno) {            printf("Connect failed: %s\n", $mysql->connect_error);        }        $mysql->set_charset ("utf8");        $stmt = $mysql->prepare("SELECT `country_name`,`region_name`,`city_name`,`latitude`,`longitude` FROM `ip2location_db11` WHERE ? <= `ip_to` LIMIT 1");        $stmt->bind_param("s", $s_ip);        $stmt->execute();}sqlSELECT `country_name`,`region_name`,`city_name`,`latitude`,`longitude` FROM `ip2location_db11` WHERE Dot2LongIP($ip) <= `ip_to` LIMIT 1SELECT id,tid,ip,useragent,time,lang,page_s FROM access_logs ORDER BY id DESC LIMIT 25它有效,但速度很慢。
查看完整描述

2 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

在我看来,您的数据库结构不是故意构建的,或者我应该说它需要改进。

为了提高单个 JOIN 查询的效率,您需要创建一个新列来包含ip2long()生成的值。

我认为在那之后你会遇到一些障碍,但我希望这个朝着正确方向的推动将有助于让你更加清晰。


查看完整回答
反对 回复 2021-10-22
?
饮歌长啸

TA贡献1951条经验 获得超3个赞

我已经结合了 SQL 函数 INET_ATON 和 JOIN,它现在可以工作了,我的最终结果是SELECT * FROM (SELECT * FROM access_logs ORDER by id desc LIMIT 10) L INNER JOIN ip2location_db11 I ON INET_ATON(L.ip) between ip_from AND ip_to这给了我想要的输出,它只是非常慢,查询需要大约 6 秒。


查看完整回答
反对 回复 2021-10-22
  • 2 回答
  • 0 关注
  • 199 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信