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)

基本的に、2 つのテーブル ( car& photo) が関連付けられています。$ids のリストには、(34、87、98、12) などの一意の写真 ID が含まれています。クエリを使用して、そのリスト内の各写真のステータスをテーブルで "1" に設定し、同時にテーブル内の手元の車photoの写真数を増やします。car

これは機能しますが、問題が 1 つあります。リストには同じ車に関連する複数の写真 ID を含めることができるため、写真の数は 1 回しか増えません。リストに同じ車に関連付けられた 10 枚の写真がある場合、photo_count は 1 になりますが、10 に増やしたいと思います。

MySQLが私のためにそれを考えすぎるのではなく、結合を介して各写真の増分を個別に発生させる方法はありますか?

上記が理にかなっていることを願っています。ありがとう。

4

2 に答える 2

6

これは、次の2つのクエリで実行できます。

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

あなたがすべきだと思うこと:

2 つのステップでテーブルを更新します。最初に photo テーブルでステータスを 1 に設定し、次に (group by と count(...) を使用して) カウントを car テーブルに更新します。

編集 「素朴なアプローチ」を撤回しました。OPが正しく述べているように機能しません!

于 2010-03-19T07:29:11.747 に答える