Php 两个表上的mysql更新查询
我尝试使用如下查询在一个查询中更新两个表:Php 两个表上的mysql更新查询,php,mysql,ajax,mysqli,Php,Mysql,Ajax,Mysqli,我尝试使用如下查询在一个查询中更新两个表: $query = "UPDATE tblproducts, tblsideimages SET tblproducts.prodCode='oj', tblsideimages.prodCode='oj' WHERE tblproducts.prodCode='aj' AND tblsideimages.prodCode='aj'"; 如果像这样的tblsideimages中有
$query = "UPDATE tblproducts, tblsideimages
SET tblproducts.prodCode='oj', tblsideimages.prodCode='oj'
WHERE tblproducts.prodCode='aj'
AND tblsideimages.prodCode='aj'";
如果像这样的tblsideimages中有内容,它就工作,但如果tblsideimages没有内容,它就不工作
问题是,我必须让它相应地调整,因为TBLSideImage中并不总是有内容。有时,用户只能添加插入tblproducts中的数据。如果tblsideimages中没有内容,它将仍然适用于tblproducts,并且如果tblsideimages和tblproducts都有内容,那么它们都将更新。谢谢 没有办法(也没有真正的理由)在一个查询中完成所有工作。因此,只需将其分为:
UPDATE tblproducts SET prodCode='oj' WHERE prodCode='aj'
UPDATE tblsideimages SET prodCode='oj' WHERE prodCode='aj'
更少的查询并不意味着“性能更高”,因此千万不要遵循将所有内容都放入一个查询的想法。您可以使用存储过程来实现这一点-在事务中使用update语句编写存储过程 使用回滚,您可以确保将它们视为一个工作单元,即要么全部执行,要么一个也不执行,以保持数据的一致性 或者执行多个查询,如
$query="UPDATE tblproducts
SET tblproducts.prodCode='oj'
WHERE tblproducts.prodCode='aj';
UPDATE tblsideimages
SET tblsideimages.prodCode='oj'
WHERE tblsideimages.prodCode='aj'";
把它分成两个查询。绝对没有理由在一个查询中执行它(在这个特殊情况下)@Icarus:oops,我错误地复制了条件。正如我所说的,隐式联接(由逗号分隔的表列表定义)是一个
内部联接
,所以若联接的右侧为空,您将得到空的结果集。因此,IFNULL(tblsideimages.prodCode,'aj')
不起作用,因为tblsideimages.prodCode
不等于null,但它只是不存在(这适用于内部联接
)。如果您的代码是LEFT JOIN
hmm,我明白了。我真的希望像我所想的那样将所有内容都放在一个查询中,因为我使用的是ajax,所以最好将所有内容放在一个查询中。@AJ Naidas:“1个查询”从来都不是万能的。您需要执行所需数量的查询1。并非每个驱动程序都支持多个查询2。你的第二个问题是错误的