【问题标题】:PHP Insert multiple rows in split batchesPHP分批插入多行
【发布时间】:2015-11-22 19:04:55
【问题描述】:

我有一个查询要分批插入多行。基本上,我需要分批拆分插入,以便为插入的批次生成唯一的随机 ID。

我尝试过很多不同的选项但都失败了,其中之一如下。

$batch = 150;
$sql = "SELECT DISTINCT `column` FROM `table` GROUP BY `column` ORDER BY `ID` ASC";
$sqle = $con->Execute($sql);
$results = $sqle->getrows();
for($i=0; $i<count($results);$i++){
    $columns1 = $results[$i]['column'];
      if($i==$batch){
            $randd = randcode(5).time();
                $sql = "INSERT INTO `newtable` SET `columns1` = ".$con->qstr($columns1).", `rcode` = ".$con->qstr($randd).", `DATE_PUBLISHED` = ".$con->qstr($sdate);
                $results=$con->Execute($sql);
           $i=0;
        }
}

但是,在每 150 批插入的查询中插入唯一代码并不成功。

为每批生成随机唯一代码我哪里出错了?我也想知道如果记录少于150条,那么如何处理呢?

【问题讨论】:

  • 您的 INSERT 查询似乎是错误的
  • 是的,这个查询无限循环
  • 只是看看我是否遵循正确;您希望每个插入的行的唯一代码是唯一的,而不是每个插入的行?例如。对于前 150 个插入的行,它可能是“12345”,而对于接下来的 150 行,它可能是“56789”?
  • $results 用于for 循环的条件,但在循环内部它被操纵(所以它可能永远不会停止运行?)。也许选择另一个名字更好?
  • @mhall 是的,正是我需要的

标签: php mysql insert split


【解决方案1】:

你一定要试试这个

<?php

$batch = 0;
$sql = "SELECT DISTINCT `column` FROM `table` GROUP BY `column` ORDER BY `ID` ASC";
$sqle = $con->Execute($sql);
$results = $sqle->getrows();


$sql = "";
for($i=0; $i<count($results);$i++)
{
    $columns1 = $results[$i]['column'];
    $randd = randcode(5).time();

    if($batch==0)
    {
        $sql = "insert into `demo` (`columns1`, `rcode`, `DATE_PUBLISHED`) values "
    }

    $sql.= "(".$results[$i]['column1'].",".$randd.",".$results[$i]['column1']."),";

    if($batch==150)
    {       
        $results=$con->Execute($sql);
        $batch=0;
        $sql="";
    }
    $batch++;
}

【讨论】:

  • 嗨,这不起作用,虽然我修复了您的代码中的一些错误,但插入仍然成功,只需 1 次插入。
【解决方案2】:

这将为您提供设置每批次随机 ID 的基本方法的逻辑。

在此示例中,没有数据库连接。您必须自己添加。您还想看看INSERT 语句的语法(剧透:INSERT INTO &lt;table name&gt; (&lt;columns&gt;) VALUES (&lt;values&gt;))。

// For this example, generate a result array with 350 rows
// (remove when using actual db query)
for ($i = 1; $i <= 350; $i++) {
    $results[] = ['column' => 'column ' . $i];
}

// Loop through all result rows
foreach ($results as $batchCounter => $result) {
    if ($batchCounter % 150 == 0) {
        // Generate a new random ID for the first row and every 150 rows
        $random = uniqid();
    }

    // Replace with proper insert statement
    echo "Insert random ", $random, ' for column "', $result['column'], '"', PHP_EOL;
}

输出:

Insert random 55e0186b0607f for column "column 1"
Insert random 55e0186b0607f for column "column 2"
Insert random 55e0186b0607f for column "column 3"
...
Insert random 55e0186b0607f for column "column 150"
Insert random 55e0186b063da for column "column 151"
Insert random 55e0186b063da for column "column 152"
Insert random 55e0186b063da for column "column 153"
...
Insert random 55e0186b063da for column "column 300"
Insert random 55e0186b0666e for column "column 301"
Insert random 55e0186b0666e for column "column 302"
Insert random 55e0186b0666e for column "column 303"
...
Insert random 55e0186b0666e for column "column 350"

【讨论】:

  • 这有点接近,我只是无法插入具有正确值的其他列,当我得到结果时会更新,谢谢
  • 如果您使用的是ADOdb,您可能需要查看他们的insert tutorial
  • 完美地发挥了作用,非常感谢您的帮助。 :)
【解决方案3】:

你必须试试这个。我修复了您的代码中的一些错误以成功插入记录:

<?php

$batch = 1;
$rows = 0;
$sql = "";
$sql = "SELECT DISTINCT `column` FROM `table` GROUP BY `column` ORDER BY `ID` ASC";
$sqle = $con->Execute($sql);
$results = $sqle->getrows();

for($i=0; $i<count($results);$i++)
{
    $columns1 = $results[$i]['column'];
    $randd = randcode(5).time();

    if($batch==1)
    {
        $sql = "insert into `demo` (`columns1`, `rcode`, `DATE_PUBLISHED`) values "
    }

    $sql.= "(".$results[$i]['column1'].",".$randd.",".$results[$i]['column1']."),";

    $rows++;
    if($batch==100)
    {

        $this->SendRecords($conn, $sql);
        $batch=1;
        $sql="";
    } else if($rows == count($results) && $batch > 1 && $batch<=100){

        $this->SendRecords($conn, $sql);
        $batch=0;
        $sql="";
     }else {
        $batch++;
        $sql.=",";
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 2012-05-23
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    相关资源
    最近更新 更多