0

これは、MySQL だけを使用してやりたいことです: (PHP なし)

PHP コード:

$result=mysql_query("select f2 from t1 where f1=constant limit L");

while( $data = mysql_fetch_row($result) )
  mysql_query("update t2 set f4=f4-1 where f3={$data[0]} limit 1");

PHPがわからない場合:

select f2 from t1 where f1=constant limit L;

for each f2 (from above result) as F:
  update t2 set f4=f4-1 where f3=F limit 1;

これを MySQL に実装するにはどうすればよいですか?

詳細:

最初の選択の出力に重複する値が存在する可能性があり、重複のそれぞれに対して更新ステートメントが実行されます。そのため、最初の選択の出力で値「123」が 3 回出現すると、f4 は f3=123 である f4-3 に更新されます。

'L' は、テーブル 't1' で "f1=constant" 条件が満たされた回数です。この数は事前にわかっているため、制限として使用されます。

フィールド 'f3' の値が一意であるため、制限 1 が使用されます。

4

1 に答える 1

1

このクエリを使用して、不足しているパラメーターを指定します。

UPDATE t2 SET f4 = f4 - 1

WHERE f3 IN (SELECT f2 FROM t1 WHERE f1 = ? LIMIT ?);

その一致t2.f4の各行を変更したい場合(一意ではない場合)、これは機能するはずです:f2f2.t1

UPDATE t2, t1 SET t2.f4 = t2.f4 - 1
WHERE t2.f3 = t1.f2
  AND t1.f1 = ?;
于 2012-09-28T19:07:27.843 に答える