SQL查询有两个条件,更新一个匹配

时间:2013-10-24 13:38:16

标签: php mysql sql

表:

id fid nfid
1  10  44
2  44  5
3  18  8

变量:

$oldid = 44;
$newid = 99;

当前查询:

UPDATE Table SET fid = $newid WHERE fid = $oldid OR nfid = $oldid

这显然将fid更新为$ newid,但我希望它更新fid OR nfid,无论哪个匹配在WHERE子句中。这可以在一个查询中完成,还是我必须做两次更新?

伪SQL:

UPDATE Table SET fid = $newid OR nfid = $newid WHERE fid = $oldid OR nfid = $oldid

对任何输入感到高兴。感谢。

3 个答案:

答案 0 :(得分:2)

您必须使用IF,我还添加了引号,以便更好地阅读:

mysql_query("
  UPDATE Table
  SET
    fid = IF (fid = ".$oldid.", ".$newid.", fid),
    nfid = IF (nfid = ".$oldid.", ".$newid.", nfid)
";

说明:

如果fid = $oldid,那么它会fid = $newid,否则会留下价值(fid = fid

如果nfid = $oldid,那么它会nfid = $newid,否则会留下价值(nfid = nfid

答案 1 :(得分:2)

为什么不使用两个单独的更新语句?

UPDATE Table 
   SET fid = $newid 
 WHERE fid = $oldid
;

UPDATE Table 
   SET nfid = $newid
 WHERE nfid = $oldid
;

否则,您必须使用CASE声明做一些时髦的事情:

UPDATE Table
   SET nfid = CASE WHEN nfid = $oldid THEN $newid ELSE nfid END
      , fid = CASE WHEN  fid = $oldid THEN $newid ELSE  fid END
 WHERE nfid = $oldid
    OR  fid = $oldid

答案 2 :(得分:-1)

我认为它的意思是:

UPDATE Table SET fid = $newid, nfid = $newid WHERE fid = $oldid OR nfid = $oldid

所以用逗号OR

替换,