gpt4 book ai didi

php - 如何减少循环时间

转载 作者:太空宇宙 更新时间:2023-11-03 11:33:04 25 4
gpt4 key购买 nike

我有一个包含大约 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 );

最佳答案

这是一个完全不需要 PHP 循环和字符串连接的解决方案。但是您仍然需要 PHP 代码(留作练习)来转换它:

$post = array(1, 2, 3);

进入这个:

SELECT 1 AS val UNION ALL
SELECT 2 UNION ALL
SELECT 3

这是您需要执行的一个查询:

INSERT INTO next_table
SELECT main_table.id, userval.val
FROM main_table
JOIN (
SELECT 1 AS val UNION ALL
SELECT 2 UNION ALL
SELECT 3
) AS userval

剧透:

$post = array(1, 2, 3);
$sql = array_reduce($post, function($acc, $value){
$cur = $acc === "" ?
sprintf("SELECT %d AS val", $value) :
sprintf("\nUNION ALL SELECT %d", $value);
return $acc . $cur;
}, "");

关于php - 如何减少循环时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48139795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com