php - 如何在 sql 查询的一部分中正确地将 2 个 foreach 循环组合在一起?
问题描述
我在数据库中有共享相同 FK 但唯一 PK 的信息,因此我将其循环显示在页面上。我想构建一个 SQL 更新查询来更新它。我现在有 2 个循环,但我不确定如何将它们完全结合起来,使其合二为一。
我缺少什么或者我需要做什么才能获得我需要的结果,以便在我运行代码时更新应该更新的唯一字段?我是否应该在另一个 for-each 循环中放置一个 for-each 循环,这样可以吗?
这是连接并从数据库中获取信息的代码,然后是一个循环来显示值和 id 字段。
//connect
$sql_awards = "select `awards`, `awardsid` from inf_awards where inf_id = $vId";
$rs_awards = mysqli_query($vconncvnl, $sql_awards);
//display inputs
while ($rs_awards_rows = mysqli_fetch_assoc($rs_awards)) {
echo '<input type="text" name="awardact[]" id="awardact" class="awardactadd" value="' . $rs_awards_rows['awards'] . '">';
echo '<input type="hidden" name="txtaward[]" value="'. $rs_awards_rows['awardsid'] .'">';
}
所以现在我可以将信息获取到流程页面我还有一个 SQL 更新语句和一个循环
我用来显示奖项 id 的 foreach 循环,然后是 sql 代码的 foreach 循环
//construction of loop for the awardsID field
$awardsId = '';
$award = $_POST['txtaward'];
foreach ($award as $awardid){
$awardsId .= $awardid;
}
//construction of the loop for building the SQL Update Query
$sql_up_award = '';
foreach ($vaccolates as $valuesawards) {
$sql_up_award .= sprintf("UPDATE inf_awards SET awards = %s WHERE inf_id = $vid AND awardsid = $awardsId ; ". "<br>", escapestring($vconncvnl, $valuesawards,'text'));
}
但是当我这样做时,它给了我
UPDATE inf_awards SET awards = 'john smith honorary' WHERE inf_id = 2 AND awardsid = 23;
UPDATE inf_awards SET awards = 'Best scorer' WHERE inf_id = 2 AND awardsid = 23;
我猜这是上一个循环的原因,因为当我在其中调用它时,它只会循环满足要求的每个值,此时它只是'23'
我想要的结果就像
UPDATE inf_awards SET awards = 'john smith honorary' WHERE inf_id = 2 AND awardsid = 2;
UPDATE inf_awards SET awards = 'Best scorer' WHERE inf_id = 2 AND awardid = 3;
解决方案
嵌套循环不会解决它,因为您最终会得到 4 次更新。
您有两个数组,一个带有 id,一个带有值。您可以制作一个 for 循环并按索引获取匹配值。
但是,我认为这并不完全安全,因为我担心人们会将文本设为空,从而搞砸你的数组,所以至少事先检查两个数组是否包含相同数量的项目很重要:
if (count($award) != count($valuesawards)) {
echo 'Please fill in all the names';
} else {
$sql_up_award = '';
//construction of the loop for building the SQL Update Query
$sql_up_award = '';
for ($i = 0; $i < count($award); $i++) (
$awardid = $award[$i];
$valuesawards = $vaccolates[$i];
$sql_up_award .= sprintf("UPDATE inf_awards SET awards = %s WHERE inf_id = $vid AND awardsid = $awardsId ; ". "<br>", escapestring($vconncvnl, $valuesawards,'text'));
}
}
推荐阅读
- angular7 - ngModel 不使用 ngx-material-timepicker 中的 value 属性并在 Angular7 中输入?
- ruby - 为什么我的脚本不能访问不同目录中的类?
- python - 如何使用字典将多个值存储在两个不同的数组中
- jquery - 每次尝试运行代码时如何修复切换到 jQuery 库
- pip - 即使在安装了开发包之后,安装 python-ldap 也会失败,并且在 ubuntu 17.10 中找不到 lber.h 文件
- python - get_object_or_404() 的第一个参数必须是模型、管理器或查询集,而不是“函数”
- android - 如何自定义底部导航项?
- reactjs - React Apollo SSR getDataFromTree 不等待查询
- keras - Conv2D + LSTM 网络给出错误
- python-3.x - 如何创建值跨多列的散点图?