如何在MySQL中实现这一点?

时间:2012-09-28 19:05:08

标签: mysql

这就是我想单独使用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中实现它?

详细信息:

第一个选择的输出中可能存在重复值,对于每个重复项,将运行update语句。因此,如果值'123'在第一个选择的输出中出现三次,则f4将更新为f4-3,其中f3 = 123。

'L'是表't1'中满足“f1 =常数”条件的次数;这个数字之前是已知的,因此被用作限制。

使用限制1,因为字段'f3'中的值是唯一的。

1 个答案:

答案 0 :(得分:1)

使用此查询,并提供缺少的参数:

UPDATE t2 SET f4 = f4 - 1

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

如果您希望对t2.f4中匹配的每一行f2进行修改(假设f2.t1不唯一),那么这应该有效:

UPDATE t2, t1 SET t2.f4 = t2.f4 - 1
WHERE t2.f3 = t1.f2
  AND t1.f1 = ?;