对所选阵列记录运行更新

时间:2018-11-20 19:55:00

标签: php sql db2

我有一个有效的测试脚本,它在做一些非常简单的事情:

从一个表中获取一个order_id,然后基于该order_id从另一个表中选择所有数据。

这行得通,但我对在本文结尾处进行其他操作的最佳方法有些困惑。

我在$getOrderNumbers中的查询是否返回一个或多个记录,而在$getOrderDetails每次成功执行后,while循环中的以下脚本将执行一个或多个记录。我的STATUS表中其他原始记录的字段。

这是工作脚本:

$getOrderNumbers = "
    SELECT 
        ORDER_ID
    FROM STATUS
    WHERE ORDER_STATUS = 'S'
    AND IS_ACTIVE = 0
";

try {
    $getNumbers = $DB2conn->prepare($getOrderNumbers);
    $ORDNumbers = $getNumbers->execute();
}catch(PDOException $ex) {
    echo "QUERY ONE FAILED!: " .$ex->getMessage();
}

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

    $orderNumParams = [
        ":ORDER_ID" => $row2["ORDER_ID"],
    ];

    print_r($row2);

    $getOrderDetails = "
        SELECT *
        FROM tableOne
        WHERE  invoice  = :ORDER_ID
    ";

    try {
        $orderDetailCheck = $DB2conn->prepare($getOrderDetails);
        $detailRslt = $orderDetailCheck->execute($orderNumParams);
        $orderDetailCount = $orderDetailCheck->fetch();
        print_r($orderDetailCount);
    }catch(PDOException $ex) {
        echo "QUERY ONE FAILED!: " .$ex->getMessage();
    }
}

基本上,当成功查询每个记录的tableOne时,我想像这样对STATUS运行更新:

UPDATE STATUS
SET IS_ACTIVE = 1
AND DATE_UPDATED = CURRENT_DATE;

如何做到这一点,以便每次成功完成后都可以设置原始表并通过此更新进行记录?

因此,如果我的第一个查询获得ORDER_ID 123456,那么当我的第二个查询成功时,我将基本上运行:

UPDATE STATUS
SET IS_ACTIVE = 1
AND DATE_UPDATED = CURRENT_DATE
WHERE ORDER_ID = 123456;

1 个答案:

答案 0 :(得分:1)

准备另一条语句进行更新。

$update = $DB2conn->prepare("
    UPDATE STATUS
    SET ACTIVE = 1, DATE_UPDATED = CURRENT_DATE
    WHERE ORDER_ID = :ORDER_ID");

请注意,要更新的列用逗号而不是AND隔开。

然后在循环中可以执行以下操作:

$update->execute($orderNumParams);

顺便说一句,您不需要每次循环都调用$DB2conn->prepare($getOrderDetails);。您只需要准备一次语句,然后在循环中执行它即可。