次のような 2 つのバージョン管理されたテーブルがあります。
アイテム:
- ID
- rev_id
- 名前
- 削除された
サブアイテム:
- ID
- rev_id
- 名前
- 親ID
- 削除された
http://kristiannielsen.livejournal.com/6745.htmlから、次のようにテーブルからオブジェクトのすべての最新バージョンを取得するのは非常に簡単で高速であることがわかります。
SELECT a.name, a.id, a.rev_id, a.deleted FROM Items a
INNER JOIN (SELECT id, MAX(rev_id) AS rev_id FROM Items GROUP BY id) b
ON (a.id= b.id AND a.rev_id b.rev_id)
しかし、ユーザーがレコードを削除するとき、deleted is 1 を新しいレコードとして新しいレコードを挿入できればクールです。ここで見つけました: https://stackoverflow.com/a/4039781/672989次のようなものを挿入できます:
INSERT INTO table (id, rev_id, name, deleted)
SELECT id, rev_id, name, 1 FROM Items WHERE id = 1 ORDER BY rev_id DESC LIMIT 1
しかし、Items テーブル内のアイテムが削除された場合 = 1 の場合、サブアイテム テーブルでも parent_id == items.id であるすべてのサブアイテムに対して、deleted = 1 の新しいレコードを追加したいと考えています。これを行う簡単な方法は何ですか?1つのクエリで可能ですか? また、別のサブサブアイテムテーブルがある場合、どうすれば同じことを達成できますか?