0

我有以下类型的 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)。通过查询,我将该列表中每张照片的状态设置为表中的“1”,photo同时增加car表中手头汽车的照片计数。

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

有没有办法通过连接使每张照片单独发生增量,而不是 MySQL 为我考虑太多?

我希望以上是有道理的。谢谢。

4

2 回答 2

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);
于 2010-03-19T15:29:10.403 回答
1

我认为你应该做的:

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

编辑 收回“天真的方法”,不会像 OP 正确声明的那样工作!

于 2010-03-19T07:29:11.747 回答