web-dev-qa-db-ja.com

whereステートメントでmysqlを一括更新する

Mysqlデータを一括で更新するには?このようなものを定義する方法:

UPDATE `table` 
WHERE `column1` = somevalues
SET  `column2` = othervalues

次のような値を使用します。

VALUES
    ('160009'),
    ('160010'),
    ('160011');

およびその他の値:

VALUES
    ('val1'),
    ('val2'),
    ('val3');

多分mysqlでは不可能ですか? PHPスクリプト?

24
user3673384

あなたの場合の最も簡単な解決策は、 ON DUPLICATE KEY UPDATE 構築。それは本当に速く動作し、簡単な方法で仕事をします。

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

または CASE 構築を使用する

UPDATE table
SET column2 = (CASE column1 WHEN 1 THEN 'val1'
                 WHEN 2 THEN 'val2'
                 WHEN 3 THEN 'val3'
         END)
WHERE column1 IN(1, 2 ,3);
40
Farside

持っている「バルク」データが動的で、PHP(結局、タグを付けた))から来ている場合、クエリは次のようになります。

INSERT INTO `foo` (id, bar)
VALUES 
    (1, 'pineapple'),
    (2, 'asian pear'),
    (5, 'Peach')
ON DUPLICATE KEY UPDATE bar = VALUES(bar);

およびPHPは、既存の配列からこれを生成します(配列が次のような形式であると仮定します:

$array = (
    somevalues_key => othervalues_value
);

)は次のようになります(決して最良の方法ではありません(たとえば、値のエスケープやサニタイズは行いません)、ほんの一例です):

$pairs = array();
foreach ($array as $key => $value) {
    $pairs[] = "($key, '$value')";
}

$query = "INSERT INTO `foo` (id, bar) VALUES " . implode(', ', $pairs) . " ON DUPLICATE KEY UPDATE bar = VALUES(bar)";
3
Davis

Implodeを使用して、mysqlをwhereステートメントで一括更新できます。

$requete = $pdo->prepare("update table_name set field = 1 where id in(".implode(', ', $ids).")");
$requete->execute();

$ idsは配列です

0
Houssin Boulla

配列形式のデータがある場合は、これを試してください

クエリは"UPDATE table WHERE column1 = ? SET column2 = ?"

以下のように設定します

foreach($data as $key => $value) {
    $query->bind_param('ss', $key, $value);
    $query->execute();
}

うまくいくことを願っています。

this からの参照。

0
Virus