【发布时间】:2018-01-07 17:35:13
【问题描述】:
我有一个包含大约 4,000 个名称的数据库表。我需要阅读这些内容,循环浏览它们并在另一个表中使用这些名称以及用户输入的 id 创建条目。最多可以有 20 个 id。我已经编写了这段代码,但是如果在三分钟后仍在运行,所以我停止了它。我希望有一种方法可以对其进行编码以减少时间。它将位于最大执行时间为 60 秒的共享服务器上,因此不会花费更长的时间。这就是我所拥有的。任何人都可以找到提高速度的方法吗?
$mysql_query = "select id from main_table";
$post = array('0' => 1, '1' => 2); //up to 20 entries
$cnt = count($post);
$str = '';
while ($item = mysql_fetch_array($mysql_query)) {
for ($i = 0; $i < $cnt; ++$i) {
$str .= "('" . $item['id'] . "', '" . $post[$i] . "'),";
}
}
$str = substr($str, 0 -1);
mysql_query("insert into next_table values" . $str );
【问题讨论】:
-
为什么不做一个
INSERT INTO ... SELECT FROM?让数据库在一个查询中完成所有工作......您应该能够将新ID注入其中 -
您不能对查询字符串运行提取循环。你需要先做一个 mysql_query() 。可能是为什么需要这么长时间。
-
不会因为您没有先运行查询,mysql_fetch_array 总是返回 false 吗?所以循环将永远运行
-
是的,它应该显示一个错误。但是他发布的代码是不正确的。
-
不要不要使用
mysql_*接口;切换到mysqli_*或PDO。
标签: php mysql sql performance loops