【问题标题】:how to use nested foreach loops in php using mysql queries如何使用 mysql 查询在 php 中使用嵌套的 foreach 循环
【发布时间】:2016-05-01 14:48:21
【问题描述】:

大家好,我正在尝试使用 2 个嵌套的 foreach 循环在表中插入/更新数据... 我有桌子 -

1.温度

vendor_ID | 组件 | 数量

2。库存

stock_ID | 组件 | 数量

$query2 = "SELECT * FROM sample.temp";
$rslt = $dbo->query($query2);
if($rslt->rowCount() > 0)
{
    foreach($rslt as $item)
    {
        $Qty = $item['Qty'];
        $component = $item['component'];
        $vendor_ID = $item['vendor_ID'];
$query5 = "SELECT * FROM sample.stock";
$reslt = $dbo->query($query5);
if($reslt->rowCount() > 0)
{
    foreach($reslt as $itm)
    {
        $Qty1 = $itm['Qty'];
        $stock_ID = $itm['stock_ID'];
        $component1 = $itm['component'];
        if(($vendor_ID!=$stock_ID && $component!=$component1) || ($vendor_ID!=$stock_ID && $component==$component1) || ($vendor_ID==$stock_ID && $component!=$component1))
        { 
        $query6 = "INSERT INTO sample.stock (stock_ID, component, Qty) VALUES ($vendor_ID, '$component', $Qty)";//inserting new entry
            if ($dbo->query($query6))
            {echo "Data inserted !";}
            else {echo "Production not updated!";}
        }
        else { $query4 = "UPDATE sample.stock SET Qty=(Qty+$Q) WHERE stock_ID=$vendor_ID AND component='$component'";//updating single existing entries
            if ($dbo->query($query4))
            {echo "Production updated !";}
            else {echo "Production not updated!";}}
        }
      }
   }
}

首先我选择一个临时表,我根据 3 次检查将数据传输到库存表中 -

  1. 更新 stock 表中的现有值(如果它们与临时表中的 stock_ID 和组件相同)

  2. 在 stock 表中插入新条目,如果它没有对应于该 stock_ID 的组件

  3. 如果库存表中有组件但不对应库存表中的任何 stock_ID,则在库存表中插入新条目

注意- 临时表中的 vendor_ID 与 stock 表中的 stock_ID 相同。

【问题讨论】:

  • 那么,真正的问题是什么?
  • @Epodax 插入查询无限插入值...我不明白如何使用嵌套的 foreach 对两个表中的每个组件进行条件检查...
  • 关于这个问题的任何更新?
  • @iamgory 我自己解决了,但你的代码也是正确的!谢谢!

标签: php mysql if-statement foreach


【解决方案1】:

单个 foreach 会更有用,您不需要嵌套的 foreach 查询。

$sql = "SELECT * FROM sample.temp";
$query = $dbo->prepare($sql);
$query->execute();

$result = $dbo->fetchAll(PDO::FETCH_ASSOC);
if(!empty($result)) {
    foreach($result as $item) {
    $Qty = $item['Qty'];
    $component = $item['component'];
    $vendor_ID = $item['vendor_ID'];

    $sql = "SELECT * FROM sample.stock WHERE stock_ID = :vendor_ID";
    $query = $dbo->prepare($sql);
    $query->bindValue(':temp_stock', $vendor_ID);
    $query->execute();
    $result = $query->fetch(PDO::FETCH_ASSOC);

        if (!empty($result)) {
            $sql = "UPDATE sample.stock SET Qty = (Qty + :Qty) WHERE stock_ID = :vendor_ID AND component= :component";
            $query = $dbo->prepare($sql);
            $query->bindValue(':vendor_ID', $vendor_ID);
            $query->bindValue(':component', $component);
            $query->bindValue(':Qty', $Qty);
            $query->execute();

            if ($query->rowCount > 0) {
            echo "Success: Updated $vendor_ID quantity";
            } else {
            echo "Error: Failed to modify $vendor_ID quantity";
            }

        } else {
            $sql = "INSERT INTO sample.stock (stock_ID, component, Qty) VALUES ($vendor_ID, '$component', $Qty)";
            $query = $dbo->prepare($sql);
            $query->bindValue(':vendor_ID', $vendor_ID);
            $query->bindValue(':component', $component);
            $query->bindValue(':Qty', $Qty);
            $query->execute();

            if ($query) {
            echo "Success: Added $vendor_ID";
            } else {
            echo "Error: Failed to add $vendor_ID";
            }
        }
    }
} else {
echo "No results in temp table";
}`

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-05
    • 2015-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    相关资源
    最近更新 更多