使用PDO

时间:2017-10-17 12:43:29

标签: php mysql arrays pdo

我无法比较此数组的值

 $products = [];
foreach (array_keys($match[2]) as $idx)
{
    $tagliaprodotto = rtrim(substr($match[2][$idx],1));
    $tagliaquantita = ltrim($match[3][$idx],'0');
    $products[] =   [
        'product'  => $tagliaprodotto,
        'quantity'  => $tagliaquantita,
        'terminal' => $match[4][$idx]
                    ];
}

使用数据库中的值!我应该这样做吗?

我想将数据库中的元素与数组的值进行比较,并将其作为:

- 如果数据库中没有产品:

INSERT INTO table (product, quantity, terminal, date) VALUES (:product, :quantity, :terminal, NOW ())

- 如果数据库记录完美匹配:产品,数量和终端:Do nothing

- 如果数据库记录包含:相同产品但数量不同和/或终端:

UPDATE table SET quantity=:quantity, terminal=:terminal

1 个答案:

答案 0 :(得分:1)

我假设您在product上编号,否则会变得更加棘手。使用ON DUPLICATE KEYIF()的组合:

INSERT INTO table (product, quantity, terminal, date)
    VALUES (:product, :quantity, :terminal, NOW())
ON DUPLICATE KEY UPDATE
    quantity = IF(quantity != :quantity AND terminal = :terminal, :quantity, quantity),
    terminal = IF(quantity = :quantity AND terminal != :terminal, :terminal, terminal)

如果product(或任何指定列)上没有索引,则UPDATE将永远不会触发。如果查询中的多个列上有索引,则会出现您不打算更新的行更新的问题,尤其是在索引不唯一的情况下。