Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 两个表上的mysql更新查询_Php_Mysql_Ajax_Mysqli - Fatal编程技术网

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。你的第二个问题是错误的