我正在尝试使用 PHP for 循环更新我的表,但它需要很长时间才能工作。我的 table 上确实有 200,000
个人。当我打开 php 文件时,浏览器完全挂起 :) 当我打开 phpMyAdmin 时,我可以看到它工作,但速度非常慢。
有没有办法直接在 phpMyAdmin 中使用 SQL 做完全相同的事情?
for ($a = 0; $a < 200000; $a++) {
$rand = mt_rand(10000000, 99999999);
// checks whether the same url exists or not
$sec = "SELECT person_url FROM person WHERE person_url = '$rand'";
$result = $sqli->query($sec);
$row = $result->fetch_assoc();
$finish = $row['person_url'];
if ($finish == false) {
$sql = $sqli->prepare("UPDATE person SET person_url = '$rand' WHERE person_id = '$a'");
$sql->execute();
}
}
最佳答案
您似乎在用特定范围内的随机数更新表中的每一行。您根本不需要进行任何 PHP 处理。
您可以简单地更新表格
update person set person_url = (cast(rand()*89999999 as signed)+10000000);
您冒着在 person_url 字段中获得重复条目的风险,您需要通过某种方式解决这个问题。
这样做的一种方法是将 person_url
列设置为唯一,并使用带有 ignore
和不同的 where
子句的查询:
update ignore person set person_url = (cast(rand()*89999999 as signed)+10000000)
where person_url is null;
这可能会一次完成工作,但如果没有,请重复运行直到完成。如果必须使用超过两到三个遍,那将是非常不幸的,而且它仍然可能比使用 PHP 手动检查唯一性快得多。
关于php - 使用 PHP for 循环的 SQL 更新时间太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27892918/