0

と の 2 つのテーブルがthreadsありthreadreplyます。

threadsには、複合主キー があり(thread_id,reply_id)ます。

に新しい行を挿入するときはthreadreply、次のことを行う必要があります。

  • threads.reply_count前の値に +1 を追加して列を更新します。と

  • threadreply+1 をMAX(reply_id)with sameに追加して、データを挿入しますthread_id

次のトリガーを使用して、 +1 を my に追加できましたが、 myreply_idを更新できませんでしたreply_count:

CREATE TRIGGER addone BEFORE INSERT ON threadreply
FOR EACH ROW BEGIN
    SET NEW.reply_id = (
        SELECT IFNULL(
            (
                SELECT MAX(reply_id) + 1
                FROM   threadreply
                WHERE  thread_id = NEW.thread_id
            ),
            1
        )
    );
END

どうすればこれを解決できますか?

4

1 に答える 1

1

質問にタイプミスがあり、複合キーがテーブルではなくテーブルに(thread_id,reply_id)存在すると思います。 トリガーは次のようになります。threadreplythreads

CREATE TRIGGER addone BEFORE INSERT ON threadreply
FOR EACH ROW BEGIN
    SET NEW.reply_id = (
        SELECT IFNULL(
            (
                SELECT MAX(reply_id) + 1
                FROM   threadreply
                WHERE  thread_id = NEW.thread_id
            ), 1
        )
    );
    UPDATE threads SET reply_count = reply_count + 1
    WHERE thread_id = NEW.thread_id;
END
/

このデモを見てください: --> http://www.sqlfiddle.com/#!2/1e7bb/2

トリガーと挿入ステートメントはウィンドウの左側にありschemaます。以下にデモの結果を示します。

于 2013-11-02T08:39:57.897 に答える