0

「users」データベース テーブルには、ユーザーが「photos」などの他のテーブルに追加したコンテンツと同期させたい多数のカウント列があります。これを達成するために、以下を使用しています。

update users u join (
    select user_id,count(*) as c
    from photos
    where status='A' group by user_id) p ON p.user_id=u.user_id
set u.photos=p.c;

しかし最近、ユーザーが写真を追加してからすべての写真を削除した場合、上記のクエリでは「写真」列が 0 にリセットされないことがわかりました。写真が削除される方法は、「写真」テーブルの「ステータス」列が変更されることです。ステータス「D」に。上記のクエリの順列を何度も試しましたが、うまくいきませんでした。

MySQL の専門知識が豊富な人が、「users」テーブルの「photos」カウント列を 0 に正しくリセットする更新されたクエリを提案できることを願っています。事前に助けてくれてありがとう!

4

1 に答える 1

1

問題は、一致がない場合に結合が失敗することです。これは、条件付き集計を使用して修正できます。

update users u join
       (select user_id, sum(status='A') as c
        from photos
        group by user_id
       ) p
       ON p.user_id = u.user_id
  set u.photos = p.c;
于 2013-08-20T16:40:15.370 に答える