【发布时间】:2015-07-15 21:43:11
【问题描述】:
我使用了下面的代码。 我是 PHP 和 Mysql 的新手...
我在循环中做错了吗?
abc 表有 70562 条记录 ip2 表有 3833421 条记录..
有什么改进的建议吗?
$sql = "SELECT * FROM abc where ip_country IS NULL";
$query = mysqli_query($con, $sql) or die (mysqli_error($con));
while ($row = mysqli_fetch_array($query)) {
$id = $row["subid"];
$ip = $row["ip"];
//Convert Ip to Number
$ipnumberconversion = ip2long($ip);
//Select Ip From Ip Table
$sql2 = "UPDATE abc as a ,
ip2 as b
SET a.ip_state = b.REGION,
a.ip_postalcode = b.ZIPCODE,
a.ip_city = b.CITY,
a.ip_country = b.COUNTRY_NAME
WHERE a.subid = '$id' AND b.IP_FROM <= $ipnumberconversion AND b.IP_TO >= $ipnumberconversion";
$query2 = mysqli_query($con, $sql2) or die (mysqli_error($con));
}
【问题讨论】:
-
ip2long()php.net/manual/en/function.ip2long.php 存在,甚至对于 mysql dev.mysql.com/doc/refman/5.0/en/… - 您可以使用 SQL 连接而不是循环来连接两个表。或者换句话说:是的,你的代码效率很低。 -
看起来像一次性的东西?如果是这样,这很重要
-
这段代码到底有什么问题?高 CPU 使用率不是编程“问题”......这是一个设计问题。
-
硬件比人工便宜,这就是我告诉我老板的 ;-)
-
根据@Sven 建议更新
标签: php mysql updates cpu-usage cpu-speed