如何根据先前的字段是不是被占用来更新记录? [关闭]

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 如何根据一个表中记录的变动更新另外一个表中相应的字段

如何根据先前表单字段的选定选项值隐藏表单字段

如何根据先前的字段输入角度更改验证

如何使用 MongoDB/Mongoose 中的先前值更新字段 [重复]

mysql根据某个字段分组根据更新时间获取最新的记录

如何根据其他记录的值更新字段