php - 使用 PHP for 循环的 SQL 更新时间太长

标签 php mysql sql sql-update

我正在尝试使用 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/

相关文章:

phpMyAdmin 用户表与站点用户列表不同步

mysql - 在 Mysql 中计算余额并结转到下一行

mysql - 如何记录/写入查询执行期间发生的错误和警告

PHP OCI8 为 'IN' 语句绑定(bind)(未知数量)参数

php - 执行自定义 mysql 查询和 "Error: Invalid PathExpression. Must be a StateFieldPathExpression"

php - 使用 JS 复制表单并更改名称数据

sql - 一个外键可以引用另一个外键吗

.net - 如何创建行特定的 sql 缓存依赖项?

php - Google Map Javascript API v3 : How to auto/easily adjust zoom level based on address detailness? 反之亦然?

php - Symfony2 - 在嵌套表单中的子表单中添加或删除字段