47
$query = mysql_query("UPDATE a SET fruit = '**apple**' WHERE id = '**1**' ");
$query2 = mysql_query("UPDATE a SET fruit = '**orange**' WHERE id = '**2**' ");
$query3 = mysql_query("UPDATE a SET fruit = '**peach**' WHERE id = '**3**' ");

それを1つのクエリに単純化する方法はありますか?

4

4 に答える 4

65

私は次の解決策を見つけました:

INSERT into `table` (id,fruit)
    VALUES (1,'apple'), (2,'orange'), (3,'peach')
    ON DUPLICATE KEY UPDATE fruit = VALUES(fruit);

IDは一意または主キーである必要があります。しかし、パフォーマンスについてはわかりません。

于 2013-09-24T13:46:06.870 に答える
64

はい、次のクエリを使用して実行できます。

UPDATE a 
SET fruit = (CASE id WHEN 1 THEN 'apple'
                     WHEN 2 THEN 'orange'
                     WHEN 3 THEN 'peach'
             END)
WHERE id IN(1,2 ,3);
于 2012-07-26T07:51:01.940 に答える
1

MySQLでIF()関数を使用すると、これは次のように実現できます。

UPDATE a
SET fruit = IF (id = 1, 'apple', IF (id = 2, 'orange', IF (id = 3, 'peach', fruit)));
于 2020-03-02T20:55:14.417 に答える
1

警告メッセージに基づく

'VALUES function' is deprecated and will be removed in a future release. Please use an alias (INSERT INTO ... VALUES (...) AS alias) and replace VALUES(col) in the ON DUPLICATE KEY UPDATE clause with alias.col instead

次のように、 Yaroslavのソリューションを少し変更することを検討してください。

INSERT into `table` (id,fruit)
VALUES (1,'apple'), (2,'orange'), (3,'peach') as tb
ON DUPLICATE KEY UPDATE fruit = tb.fruit;

同じことをしますが、警告メッセージをミュートします。

于 2020-07-31T16:06:05.960 に答える