如何根据先前的字段是不是被占用来更新记录? [关闭]
Posted
技术标签:
【中文标题】如何根据先前的字段是不是被占用来更新记录? [关闭]【英文标题】:How to update a record based on if previous fields are occupied? [closed]如何根据先前的字段是否被占用来更新记录? [关闭] 【发布时间】:2013-11-11 12:03:44 【问题描述】:我的语法是否有问题,它没有在我的 php 脚本中执行?我没有更新我试图更新的所有记录,其中 invoice_no 等于另一个表单中的“$id”,但只有当 pp1_dt、pp1_amt、pp1_ref 为空时,否则继续到 pp2_dt、pp2_amt、pp2_ref 等等到 5。
$i=1;
while($i <= 5)
$pp_sql = "UPDATE Invoices SET pp'$i'_dt = '$pp1_dt', pp'$i'_amt = '$pp1_amt', pp'$i'_ref = '$pp1_ref' where invoice_no='$id' AND (coalesce(pp'$i'_dt, pp'$i'_amt, pp'$i'_ref) is null)";
if($db->exec($pp_sql))
$p_num = $i;
else
$i++;
【问题讨论】:
您要更新记录吗? 这不是有效的 PHP,请检查给定的错误消息以修复它。 不要为每个INSERT
发送新查询
不更新我尝试更新的所有记录,其中 invoice_no 等于另一个表单中的 id,但前提是 pp1_dt、pp1_amt、pp1_ref 为空,否则转到 pp2_dt、pp2_amt、pp2_ref 等等到 5.
不明白为什么你们投了反对票而你不能帮助我?
【参考方案1】:
你不能在你的字符串中使用你的计数器变量,你需要连接它
$pp_sql = "UPDATE Invoices SET pp" . $i . "_dt = '$pp1_dt', pp" . $i . "_amt = '$pp1_amt', pp" . $i . "_ref = '$pp1_ref' where invoice_no=" . $id . " AND (coalesce(pp" . $i . "_dt, pp" . $i . "_amt, pp" . $i . "_ref) is null)";
按照您现在编写的方式,它试图在您的表中查找名为 pp$i 的列,而不是不存在的 pp1、pp2 等。
【讨论】:
更改$pp_sql后查询仍然无法执行【参考方案2】:Shenir,如果您想更新任何记录,那么您应该尝试使用 UPDATE 而不是 INSERT。如果您希望 INSERT & UPDATE 使用相同的查询而不是使用重复记录的键。
我建议你应该阅读这篇文章http://dev.mysql.com/doc/refman/5.5/en/insert-on-duplicate.html
【讨论】:
我将我的 sql 更改为 "$pp_sql = "UPDATE Invoices SET pp'$i'_dt = '$pp1_dt', pp'$i'_amt = '$pp1_amt', pp'$i' _ref = '$pp1_ref' 其中 invoice_no='$id' AND (coalesce(pp'$i'_dt, pp'$i'_amt, pp'$i'_ref) 为空)";"没有任何运气。以上是关于如何根据先前的字段是不是被占用来更新记录? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
oracle 如何根据一个表中记录的变动更新另外一个表中相应的字段