2

桌子:

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 或 nfid,以 WHERE 子句中匹配的为准。这可以在一个查询中完成,还是我必须进行两次更新?

伪 SQL:

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

很高兴任何输入。谢谢。

4

3 回答 3

2

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

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

解释:

if fid = $oldid, 那么它会做fid = $newid,否则它会留下 value ( fid = fid)

if nfid = $oldid, 那么它会做nfid = $newid,否则它会留下 value ( nfid = nfid)

于 2013-10-24T13:45:12.913 回答
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
于 2013-10-24T13:48:26.923 回答
-1

我认为它的意思是写成:

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

所以OR用逗号替换,

于 2013-10-24T13:43:51.397 回答