如何使用mysql查询在php中使用嵌套的foreach循环

如何使用mysql查询在php中使用嵌套的foreach循环,php,mysql,if-statement,foreach,Php,Mysql,If Statement,Foreach,大家好,我正在尝试使用2个嵌套的foreach循环在表中插入/更新数据。。。 我有桌子- 1。温度 供应商标识|部件|数量 2。股票 库存|部件|数量 首先,我选择了一个临时表,在3次检查的基础上将数据传输到库存表- 若库存表中的现有值和临时表中的库存ID和组件相同,则更新库存表中的现有值 如果库存表中没有与该库存ID对应的组件,则在库存表中插入新条目 在库存表中插入新条目,前提是该条目具有组件,但与库存表中的任何库存ID均不对应 注意-临时表中的供应商ID与库存表中的库存ID相同。单个fore

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

1。温度

供应商标识|部件|数量

2。股票

库存|部件|数量

首先,我选择了一个临时表,在3次检查的基础上将数据传输到库存表-

  • 若库存表中的现有值和临时表中的库存ID和组件相同,则更新库存表中的现有值

  • 如果库存表中没有与该库存ID对应的组件,则在库存表中插入新条目

  • 在库存表中插入新条目,前提是该条目具有组件,但与库存表中的任何库存ID均不对应


  • 注意-临时表中的供应商ID与库存表中的库存ID相同。

    单个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";
    }`
    

    那么,实际的问题是什么?@Epodax插入查询无限地插入值。。。我不知道如何使用nested foreach对两个表中的每个组件进行条件检查……有任何更新吗?@iamgory我自己解决了这个问题,但您的代码也是正确的!谢谢
    $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";
    }`