私はこの構造を持つ1つのmysqlクエリで特定のパラメータによってテーブル内のすべての値を更新しようとします:
seller_id | product | value
1 | apple | 100
1 | onion | 50
1 | cherry | 20
1 | lemon | 200
2 | apple | 10
2 | onion | 40
2 | lemon | 100
3 | apple | 10
3 | lemon | 50
3 | orange | 140
通常、更新には複数のクエリを使用します。1 つの選択と複数の更新ですが、大きなデータベースでパフォーマンスを向上させるために 1 つのクエリだけを作成したいと考えています。
SELECT `product` FROM table WHERE seller_id = '1' AND `value` > '0'
while($r = mysql_fetch_row($query))
{
$list[] = $r['0'];
}
foreach($list as $k => $i)
{
UPDATE `table` SET `value`='100' WHERE product = '$i'
// updated: apple:100; onion:100; cherry:100; lemon:100; for all seller which have it
}
これから 1 つのクエリを作成しようとします。seller:1 のストレージにあるすべての製品を取得し、すべての売り手の値を更新する必要があります。
私はこのようなことを試みましたが、うまくいきませんでした (#1093 - FROM 句で更新するターゲット テーブル 'table' を指定することはできません)
UPDATE table SET value='100' WHERE product =
(SELECT `product` FROM table WHERE seller_id = '1')
より多くのパフォーマンスが必要ですが、そのために PHP を使用したくありません