【问题标题】:How to INSERT in one table and UPDATE in another in single QUERY?如何在一个表中插入并在单个查询中更新另一个表?
【发布时间】:2013-08-16 00:28:48
【问题描述】:

我目前正在创建某种库存系统。

我有 master_tbl 我保存项目的位置。在master_tbl,我有专栏qty_left 或剩余的可用库存。

我还有一张表issuance_tbl,我在其中保存了发行项目的所有交易。 在这个表中有issued_qty

我的问题是如何在更新master_tbl.qty_left 的同时将一行插入issuance_tbl。 (master_tbl.qty_left - issue_tbl.issued_qty)。

有可能吗?

【问题讨论】:

  • 创建一个存储过程。
  • 在插入时使用触发器
  • 为什么不使用 2 个查询?
  • 因为,我有一个表格,可以接受 issue_tbl 的记录。该表格中还包括我需要更新 master_tbl.qty_left 的“issued_qty”。
  • 看看这个答案,也许它对你有帮助stackoverflow.com/a/4754333/2550094

标签: php mysql


【解决方案1】:

我认为最好的方法是使用存储过程。您可以在一个地方拥有一堆带有错误处理和 ACID 事务的 SQL 语句。这是因为如果您的第一个查询执行而第二个查询失败,您可能需要回滚事务。存储过程允许所有这些花哨但可靠的东西。

您可以从这里开始:http://forums.mysql.com/read.php?98,358569

【讨论】:

  • 我是新手程序员,我对存储过程一无所知。 :(
  • @ChocoMartin:互联网上有数以百万计的关于存储过程的教程(MySQL 也有一个——您确实阅读了手册,对吗?)。你真的应该阅读它们。
  • 那我建议投资一些时间。它将真正帮助您在未来编写企业级应用程序。您将找到数以千计的关于该主题的示例和教程。
【解决方案2】:

示例如下:

    <form method="post">
    QTY:<input type="text" name="qty_left"></input>
        <input type="submit" name="submit" value="update"></form>

   <?php
         ////////your config db
     $qty = $_POST['qty_left'];
     if(isset($_POST['submit']);
     $sql = mysql_query("insert into issuance_tbl (issued_qty) values (".$qty.") ");
     $sql1 = mysql_query("update master_table set qty_left= ".$qty."");
     ?>

【讨论】:

  • UPDATE FROM 已弃用。
  • 我忘记删除 from
  • 无论如何,所有 mysql_* 都已弃用。并且您的更新查询将基于 where 条件?
  • 它取决于您需要从哪里更新的数据库,如果它是主键或外键。
【解决方案3】:

我并不完全相信“如果有任何方法可以做到这一点”: 您需要分步进行,如下所示:

$result = $this->db->insert($table);//Example function to insert inventory item
$insert_id = $this->db->insert_id();//Example function to get the id of inserted item
if($result)
$res = $this->db->update($id,$data,$table);//Example function to update data of quantity table

if(!$res)
{
$this->db->delete($insert_id,$table);s
$result = '-1';
}
return $result;

希望这可能会有所帮助

【讨论】:

    【解决方案4】:
    $con = mysqli_connect($host, $user, $password, $database);
    ...
    $issued_qty = '10'; //some value
    
    $insert_query = "insert into issuance_table (issued_qty, ...) values ('$issued_qty', ... ) ;";    
    $update_query = "update master_tbl set qty_left = (qty_left - ".$issued_qty.")  where ....";    
    mysqli_multi_query($con, $insert_query.$update_query);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-10
      • 2020-09-09
      • 1970-01-01
      • 1970-01-01
      • 2021-03-26
      相关资源
      最近更新 更多