修改工作更新/插入以批量执行1000次

时间:2018-03-08 14:27:25

标签: php mysql pdo

我目前有PDO语句根据条件执行更新和插入,并且它运行良好但我想修改它以批量执行此操作,因为我们现在获得更多数据。

我希望以500或1000的批量执行此操作,但我不确定如何将其纳入准备和执行PDO语句。

非常感谢任何帮助或指导。

以下是这些功能的代码:

//Create prepared INSERT statement
$insertPlacement = "
    INSERT ignore INTO placements_new (sku_id, group_id, dealer_id, start_date, expire_date, locations, order_num)
    SELECT 
        id, 
        sku_group_id, 
        :DEALER, 
        DATE_ADD(DATE_FORMAT(CONVERT(:SHIPDATE, CHAR(20)), '%Y-%m-%d'),INTERVAL 7 DAY) as start_date,
        DATE_ADD(DATE_FORMAT(CONVERT(:SHIPDATE, CHAR(20)), '%Y-%m-%d'),INTERVAL 127 DAY) as expire_date, 
        :QUANTITY,
        :INVOICE  
    FROM skus s  
    WHERE  s.frame=:FRAME AND s.cover1=:COVER AND s.color1=:COLOR
";

//create update statement for necessary constraints
$updatePlacement = "
    UPDATE placements_new 
    SET expire_date = DATE_ADD(DATE_FORMAT(CONVERT(current_date(), CHAR(20)), '%Y-%m-%d'),INTERVAL 127 DAY)
";

while ($row2 = $detailCheck->fetch(PDO::FETCH_ASSOC)) {

    $values = [
        ":DEALER" => $row2["DEALER"],
        ":SHIPDATE" => $row2["SHIPDATE"],
        ":QUANTITY" => $row2["QUANTITY"],
        ":INVOICE" => $row2["INVOICE"],
        ":FRAME" => $row2["FRAME"],
        ":COVER" => $row2["COVER"],
        ":COLOR" => $row2["COLOR"],
    ];

    $values2 = [
        ":DEALER" => $row2["DEALER"],
        ":FRAME" => $row2["FRAME"],
        ":COVER" => $row2["COVER"],
        ":COLOR" => $row2["COLOR"],
        ":INVOICE" => $row2["INVOICE"],

    ];

    try{
        //Array will contain records that are expired
        $checkExisting = $MysqlConn->prepare($expiredCheck);
        $existingRslt = $checkExisting->execute($values2);
        $count3 = $checkExisting->fetch(PDO::FETCH_ASSOC);

        //Array will contain records that are valid
        $checkExistingValid = $MysqlConn->prepare($validCheck);
        $existingVldRslt = $checkExistingValid->execute($values2);
        $count4 = $checkExistingValid->fetch(PDO::FETCH_ASSOC);

        //print_r($count3);

    }catch(PDOException $ex){
            echo "QUERY FAILED!!!: " . $ex->getMessage();
    }



    // IF records do not exist, or records exist and today is after expiration date
    if(empty($count3) && empty($count4)){
        for($i=0; $i<$row2["QUANTITY"]; $i++) {  
            try{
                $insert = $MysqlConn->prepare($insertPlacement);
                $insertRslt = $insert->execute($values);
            }catch(PDOException $ex){
                echo "QUERY FAILED!!!: " . $ex->getMessage();
            }

        }
    }elseif(!empty($count3)){
        for($i=0; $i<$row2['QUANTITY']; $i++){
            try{
                $insert = $MysqlConn->prepare($insertPlacement);
                $insertRslt = $insert->execute($values);
            }catch(PDOException $ex){
                echo "QUERY FAILED!!!: " . $ex->getMessage();
            }
        }
    }elseif(!empty($count4)){
        for($i=0; $i<$row2['QUANTITY']; $i++){
            try{
                $update = $MysqlConn->prepare($updatePlacement);
                $updateRslt = $update->execute($values);
            }catch(PDOException $ex){
                echo "QUERY FAILED!!!: " . $ex->getMessage();
            }
        }
    }else{
        die("No action taken");
    }

0 个答案:

没有答案