MySQL UPDATE WHERE IN分别为每个列出的值?

时间:2010-03-19 03:50:16

标签: mysql database join where-clause

我有以下类型的SQL:

UPDATE photo AS f 
  LEFT JOIN car AS c 
         ON f.car_id=c.car_id 
  SET f.photo_status=1
    , c.photo_count=c.photo_count+1 
  WHERE f.photo_id IN ($ids)

基本上,两个表格(car& photo)是相关的。 $ ids中的列表包含唯一的照片ID,例如(34,87,98,12)。通过查询,我将该列表中每张照片的状态设置为photo表中的“1”,同时在car表格中为手头的汽车增加照片计数。

它有效,但有一个障碍:因为列表可以包含多个与同一辆汽车相关的照片ID,所以照片计数只会增加一次。如果列表中有10张照片与同一辆车相关联,则photo_count将变为1 ....而我想将其增加到10张。

有没有办法通过连接单独为每张照片进行增量,而不是MySQL为我过度思考?

我希望上述内容有道理。感谢。

2 个答案:

答案 0 :(得分:6)

您可以使用两个查询执行此操作:

UPDATE car
SET photo_count = photo_count + (
    SELECT count(*)
    FROM photos
    WHERE photo.car_id = car.car_id
    AND photo_status = 0
    AND photo_id IN ($ids)
);

UPDATE photo
SET photo_status = 1
WHERE photo_id IN ($ids);

答案 1 :(得分:1)

我认为你应该做的事情:

分两步更新表格。首先在照片表中将状态设置为1,然后将计数(通过使用group by和count(...))更新到car table。

修改 撤回'天真的方法',将无法正常运行OP!