プロジェクトテーブル3つのテーブルと条件文を含むトリガを作成することは可能ですか?
+-----------+---------------------+-------------------------------------------------+
| id | project name |status (1 confirmed/2 in progress/3 done) |
+-----------+---------------------+-------------------------------------------------+
| 233 | project 1 |1 |
+-----------+---------------------+-------------------------------------------------+
| 234 | project 2 | 3 |
+-----------+---------------------+-------------------------------------------------+
表2があり、私は私のデータベースに3つのテーブルを持っており、それらはすべて互いに
に依存しているカテゴリ
+-----------+---------------------+-------------------+-------------------+-------------------+
| id | category | confirmed_counter | inprogress_counter|done_counter |
+-----------+---------------------+-------------------+-------------------+-------------------+
| 1 | c++ | 2 |3 | 1 |
+-----------+---------------------+-------------------+-------------------+-------------------+
| 2 | php | 3 |4 | 6 |
+-----------+---------------------+-------------------+-------------------+-------------------+
及び表3は、カテゴリですオブジェクト
+-----------+---------------------+------------+
| id | project_id | category_id|
+-----------+---------------------+------------+
| 1 | 233 | 2 |
+-----------+---------------------+------------+
| 2 | 244 | 3 |
+-----------+---------------------+------------+
私はトリガを作成したい管理者は、プロジェクトを確認すると、プロジェクトのステータスは
を変更すると、それはステータスが confirmed_counter
が をインクリメントしなければならないので、カテゴリテーブルに1に変更されます、カテゴリのカウンタを更新するが、最初に私はカテゴリオブジェクトを調べて、カテゴリが何であるかを見るために持っていますか、そのプロジェクトのカテゴリーは、その後、これらのカテゴリ
$c = $project->get_categorys();
///// it returns array of that project category ids (2 ,3 ,4)
$sql = update `categorys` set `confirmed_counter` = confirmed_counter+1 where `id` in (2,3,4);
とプロジェクトが進行中である
$sql = update `categorys` set `confirmed_counter` = confirmed_counter-1 , `inprogress_counter` = inprogress_counter+1 where `id` in (2,3,4);
のカウンタフィールドを更新しますプロジェクトは
$sql = update `categorys` set `inprogress_counter` = inprogress_counter-1 , `done_counter` = done_counter+1 where `id` in (2,3,4);
を行われ、それが進行
でいたときに、プロジェクトがリセットされてしまうかもしれませんそのため に常にないときなど、カウンタに
最初のiを更新する前に2の重要なステップがあります3番目のテーブルからプロジェクトのカテゴリIDを取得する必要があります
私はプロジェクトの現在および以前のステータスに基づいてカウンターを増減する必要があります
これを行うためのトリガーを作成することは可能ですか?
///////////////////////////////////////////////////////////////////////////// ////編集/////////////////////////
直前の状態を想定して、コード内でOLDを使用して指定しますか?
SET
confirmed_counter =
CASE NEW.status
WHEN 1 THEN confirmed_counter + 1
ELSE confirmed_counter
END,
confirmed_counter =
CASE OLD.status
WHEN 1 THEN confirmed_counter - 1
ELSE confirmed_counter
END,
に
SET
confirmed_counter =
CASE NEW.status
WHEN 1 THEN confirmed_counter + 1
WHEN 2 THEN confirmed_counter - 1
ELSE confirmed_counter
END,
を変更するように私はこのようにそれを使用しようとしたが、常に最後の文は、それが可能にはい
ありがとう、私は私の質問あなたはCASEのstatamentの第二のバージョンを使用することができます – max
を見てご利用ください更新しました - [条件]は、結果THEN [条件] [結果CASEを... ] [ELSE result] END。詳細 - http://dev.mysql.com/doc/refman/5.5/en/control-flow-functions.html – Devart
私は例を追加しました。 – Devart