【问题标题】:mysql update query on two tables两个表上的mysql更新查询
【发布时间】:2012-03-25 14:24:40
【问题描述】:

我正在尝试使用如下所示的查询在一个查询中更新两个表:

$query = "UPDATE tblproducts, tblsideimages 
          SET tblproducts.prodCode='oj', tblsideimages.prodCode='oj' 
          WHERE tblproducts.prodCode='aj' 
              AND tblsideimages.prodCode='aj'";

如果 tblsideimages 中有内容,则它可以工作,但如果 tblsideimages 没有内容,则它不起作用。

问题是我必须对其进行相应调整,因为 tblsideimages 中并不总是会有内容。有时用户只能添加插入到 tblproducts 中的数据。我怎样才能做到这一点,如果 tblsideimages 中没有内容,它仍然适用于 tblproducts,如果 tblsideimages 和 tblproducts 都有内容,两者都会更新。谢谢!

【问题讨论】:

  • 只需将其拆分为 2 个查询。绝对没有理由在一个查询中执行它(在这种特殊情况下)
  • @Icarus:哎呀,我错误地复制了条件。好吧,正如我所说,隐式连接(由逗号分隔的表列表定义)是INNER JOIN,因此如果连接的右侧为空,您将得到空结果集。所以IFNULL(tblsideimages.prodCode,'aj') 不起作用,因为tblsideimages.prodCode 不等于null,但它不存在(这适用于INNER JOIN)。如果它是LEFT JOIN,你的代码就可以工作

标签: php mysql ajax mysqli


【解决方案1】:

没有办法(也是真正的理由)在一个查询中完成所有工作。所以只需将其拆分为:

UPDATE tblproducts SET prodCode='oj' WHERE prodCode='aj' 

UPDATE tblsideimages SET prodCode='oj' WHERE prodCode='aj'

更少的查询并不意味着“更高的性能”,因此永远不要遵循将所有内容都放入一个查询的想法。

【讨论】:

  • 嗯,我明白了。我真的希望将所有内容都放在一个查询中,因为我使用的是 ajax,所以最好将所有内容放在一个查询中..
  • @AJ Naidas:“1 个查询”从来都不是灵丹妙药。您需要根据需要执行尽可能多的查询
【解决方案2】:

您可以使用存储过程来执行此操作 - 使用事务中的更新语句编写存储过程。

使用回滚,您可以确保将它们视为一个工作单元,即它们要么全部执行,要么都不执行,以保持数据一致。

或执行多个查询,如

     $query="UPDATE tblproducts
             SET tblproducts.prodCode='oj'
             WHERE tblproducts.prodCode='aj';
             UPDATE tblsideimages 
             SET tblsideimages.prodCode='oj'
             WHERE tblsideimages.prodCode='aj'";

【讨论】:

  • 1.并非每个驱动程序都支持多个查询 2. 你的第二个查询是错误的
猜你喜欢
  • 2011-06-26
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 2019-08-21
  • 2013-01-27
相关资源
最近更新 更多