【问题标题】:Compare array values with mysql database values with PDO将数组值与 mysql 数据库值与 PDO 进行比较
【发布时间】:2017-10-17 12:43:28
【问题描述】:

我无法比较这个数组的值

 $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]
                    ];
}

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

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

-如果数据库中不存在产品:

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

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

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

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

【问题讨论】:

  • 我没有单个变量 $user = 'userName';
  • 这是演示示例,因此您可以像这样更新代码
  • 是的,但我不知道怎么做!因为它是另一个数组!我不知道如何比较相同的产品和它的记录

标签: php mysql arrays pdo


【解决方案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 将永远不会触发。如果查询中的多个列上有索引,则会出现您不打算更新的行被更新的问题,尤其是在索引不唯一的情况下。

【讨论】:

  • 谢谢,但我也需要更新日期,但只有在数量或终端发生变化或产品不存在时——
  • 这是对更新部分中查询的相对简单的添加,您应该能够添加它。它仍将使用IF(),看起来与数量和终端设置相似,但要长一些。试一试,如果您仍然需要帮助,我会引导您完成。
  • 一个答案:1如果数量不同,终端不同,它不起作用,对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-15
  • 1970-01-01
  • 2023-04-07
相关资源
最近更新 更多