0

私が探しているのは、レコードを挿入してから、同じ ID を持つ以前のレコードを非アクティブ化することです。それらは使用されなくなるためです。ただし、これを可能な限り簡単な方法で行うことを検討しています。レコードを削除することは、実際にはオプションではありません。

試みた操作の順序:

  1. アクティブな inUse 値で挿入inUse = 1
  2. 使用されなくなった同じ ID の次のレコードを更新します。inUse = 0

私の最初の考えは、このクエリを実行することでした:

UPDATE page_tags SET inUse = IF(inUse = 1, 0, 1) WHERE page_id = 23678459 AND tag_id NOT IN (10, 4);

このクエリの唯一の問題は、再度実行すると、非アクティブ化されたすべての値が 1 に戻ることです。特定の ID のすべてのタグが、WHERE ステートメントの対象になっている場合にのみ元に戻るようにする必要があります。

4

2 に答える 2

1

トリガーの仕事のようですね。おそらく(疑似コード)のようなものはありますか?

以前のタグの再利用を処理するための更新:

挿入/更新を行います:

INSERT INTO ... ON DUPLICATE KEY UPDATE

次に、挿入用と更新用の 2 つのトリガーを使用します。

CREATE TRIGGER tr_inuse_insert BEFORE INSERT ON page_tags
  FOR EACH ROW BEGIN
    UPDATE page_tags SET inuse=0 WHERE page_id = NEW.page_id;
  END;

CREATE TRIGGER tr_inuse_update BEFORE UPDATE ON page_tags
  FOR EACH ROW BEGIN
    UPDATE page_tags SET inuse=0 WHERE page_id = NEW.page_id;
  END;
于 2012-06-05T21:15:34.793 に答える
0

@John Pにはまともな答えがありますが、彼の答えにはトリガーを使用する必要があります。私には、目前の問題を解決するのに必要以上に思えます。現在の作業ソリューションは次のとおりです。

とに一意のインデックスを作成します。page_tags.page_idpage_tags.tag_id

*page_id = 234234*のすべての行を更新します。

UPDATE page_tags SET inUse = 0 WHERE page_id = 234234

タグを挿入:

INSERT INTO page_tags (page_id, tag_id, inUse) VALUES (234234, 49343, 1) ON DUPLICATE KEY UPDATE inUse = 1
于 2012-06-06T20:17:27.583 に答える