大家好,我正在尝试使用 2 个嵌套的 foreach 循环在表中插入/更新数据... 我有 table -
<强>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 次检查选择一个临时表,从中将数据传输到 stock 表中 -
如果 stock 表中的现有值与临时表中的 stock_ID 和组件相同,则更新它们
如果没有与该 stock_ID 对应的组件,则在 stock 表中插入新条目
如果它具有组件但不对应于库存表中的任何 stock_ID,则在库存表中插入新条目
注意- 临时表中的 vendor_ID 与 stock 表中的 stock_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";
}`
关于php - 如何使用 mysql 查询在 php 中使用嵌套的 foreach 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34990136/