如何将 column = 的所有行更新为 1 以外的值,然后将该行更新为另一个值?

How to update all rows with column = to value except 1, then update that one to another value?

我有一个 MySQL OFFERS table,带有 OID、PID 和 STATUS。 STATUS 有 3 个 ENUM 值。 O A C.(打开、接受、关闭)。它看起来像这样:

+---------+-------------+--------+
|   oid   |    pid      | status |
+---------+-------------+--------+
|    1    |     1       |    o   |
|    2    |     1       |    o   |
|    3    |     1       |    o   |
|    4    |     2       |    o   |
+---------+-------------+--------+

所有报价均已开放。 当用户想要接受报价时,他们单击一个按钮,该按钮将 post ID (PID) 和报价 ID (OID) 发送到 php 文件,该文件对数据库执行 UPDATE 语句。我希望语句将 table 更新为如下所示:

+---------+-------------+--------+
|   oid   |    pid      | status |
+---------+-------------+--------+
|    1    |     1       |    a   |
|    2    |     1       |    c   |
|    3    |     1       |    c   |
|    4    |     2       |    o   |
+---------+-------------+--------+

Psudo-PHP-MySQLI语句:

UPDATE offers 
SET status='c' 
WHERE pid = $_POST['pid'], except WHERE oid = $_POST['oid']

还有 SET status='a' WHERE oid = $_POST['oid']
我是 PHP 和 MySQLi 的新手,所以我不知道如何构建所有语句。这种说法甚至可能吗?我知道使用准备好的语句,但为了简单起见,我只是在此处添加值。谢谢!

使用CASE根据条件指定要分配的不同值。

UPDATE offers
SET status = 
    CASE oid
        WHEN $_POST['oid'] THEN 'a'
        ELSE 'c'
    END
WHERE pid = $_POST['pid']