Sql Update字段值相互之间

时间:2017-11-01 05:37:09

标签: php mysql sql mysqli

我有一个sql表如下:

id      position
----------------
1       1
2       2

现在我要交换id的位置,这意味着我需要o / p如下:

id      position
----------------
1       2
2       1

所以我尝试了这个:

$update1 = "UPDATE table SET pos=(pos-1) WHERE pos = 2;
$conn->query($update1);

但现在的问题是该表有两个具有相同值的位置,那么如何在上面显示的结果中相互更新?

4 个答案:

答案 0 :(得分:2)

UPDATE example_table
   SET position = CASE id
                 WHEN 1 THEN 2
                 WHEN 2 THEN 1
                  END
 WHERE id BETWEEN 1 AND 2

答案 1 :(得分:1)

如果你真的拥有两行,那么带有CASE表达式的更新应该能够解决这个问题:

UPDATE yourTable
SET position = CASE WHEN position = 1 THEN 2 ELSE 1 END
WHERE id IN (1, 2);

答案 2 :(得分:0)

选项-1

UPDATE table SET pos = (CASE pos WHEN 1 THEN 2 ELSE 1 END) WHERE pos = 2;

选项-2

如果值始终为0或1,则可以使用按位异或运算符。

UPDATE dbo.Table1 SET col2 = (col2 ^ 1);

答案 3 :(得分:0)

也许您应该在代码上尝试orderBy命令。 SQL代码是

  

SELECT * FROM YourTable ORDER BY position desc;

在这种情况下,您的整个职位列将被撤销。 我不知道php,但我相信你可以修改该命令以供你使用。