-1

私はこの構造を持つ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 を使用したくありません

4

3 に答える 3