PHP在拆分批次中插入多行

时间:2015-08-28 07:32:04

标签: php mysql insert split

我有一个查询要在拆分批次中插入多行。基本上,我需要批量拆分插件,以便我可以为插入的批次生成唯一的随机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条记录,那么如何处理呢?

3 个答案:

答案 0 :(得分:2)

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

在此示例中,没有数据库连接。您必须自己添加。您还想查看INSERT语句的语法(扰乱器:INSERT INTO <table name> (<columns>) VALUES (<values>))。

// 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"

答案 1 :(得分:0)

你必须尝试这个

<?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++;
}

答案 2 :(得分:0)

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

<?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.=",";
    }
}
相关问题