2015-08-28 42 views
3

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

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

$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条记录,那么如何处理相同的记录?

+0

您的INSERT查询似有不妥 –

+0

是这个查询无限循环 – sammry

+0

只是为了看看我是否正确地遵循;您希望唯一代码对于每个插入的批次行是唯一的,而不是每个插入的行?例如。对于前150个插入的行,它可能是“12345”,对于下一个150行,它可能是“56789”? – mhall

回答

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" 
+0

这是有点接近,我只是无法插入其他列的正确值,将更新,因为我得到的结果,谢谢 – sammry

+0

如果您使用[ADOdb](http://phplens.com/adodb /),你可能想看看他们的[插入教程](http://phplens.com/adodb/tutorial.inserting.html) – mhall

+0

完美的工作就像一个魅力,非常感谢您的帮助。 :) – sammry

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

嗨,这不起作用,虽然我修正了一些你的代码中的错误,但仍然插入只有1插入成功。 – sammry

+0

我加我的代码请检查这 –