代码之家  ›  专栏  ›  技术社区  ›  Tom

mysql分别为每个列出的值更新在哪里?

  •  0
  • Tom  · 技术社区  · 14 年前

    我有以下类型的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 )是相关的。$id中的列表包含唯一的照片ID,例如(34、87、98、12)。通过查询,我将该列表中每个照片的状态设置为 照片 表并同时增加 汽车 手边的汽车桌。

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

    有没有一种方法可以通过连接使每张照片的增量单独发生,而不是让MySQL过度考虑它?

    我希望上面讲得通。谢谢。

    2 回复  |  直到 12 年前
        1
  •  6
  •   Teun Zengerink Dhiraj Thakur    12 年前

    您可以通过两个查询来完成此操作:

    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);
    
        2
  •  1
  •   lexu    14 年前

    我认为你应该做的是:

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

    编辑 收回“幼稚的方法”,不会工作,因为操作正确的状态!