0

我有 2 个这样的版本表:

项目:

  • ID
  • rev_id
  • 姓名
  • 已删除

分项:

  • ID
  • rev_id
  • 姓名
  • parent_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)

但是当用户删除一条记录时,如果我可以插入一条删除为 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 的所有子项目添加删除 = 1 的新记录。有什么简单的方法可以做到这一点,是否可以通过一个查询?如果我什至还有另一个 subsubitems 表,我怎么能在那里实现呢?

4

1 回答 1

0

您需要创建一个“插入时”触发器来覆盖deleted父级是否已被标记的值:

DELIMITER ;;

CREATE TRIGGER foo BEFORE INSERT ON Items FOR EACH ROW
  IF (SELECT deleted FROM Items WHERE id = NEW.parent_id) THEN
    SET NEW.deleted := 1;
  END IF;;

DELIMITER ;
于 2012-05-07T23:59:21.720 回答