0

这是我的表的最小版本:

CREATE TABLE posts (
    id int unsigned PRIMARY KEY auto_increment,
    root_id int unsigned,
    parent_id int unsigned
);

数据是树形结构,所以parent_id字段包含明显的,root_id字段包含根帖子的id,即树中最顶层的帖子,树中最老的祖先。

现在,当我插入一个本身是新树根的新帖子时,parent_id将是空的,因为它没有父级,但root_id应该引用它自己。有没有办法进行插入,将相同的值id放入 into root_id?我想避免进行插入、获取新 id 并使用第二个查询更改根 id,但也许这是唯一的方法。

提前致谢。

4

3 回答 3

1

你可以做

INSERT INTO
  posts
SET
  root_id = (SELECT Auto_increment FROM information_schema.tables WHERE table_name = 'posts');

小提琴

于 2013-03-31T13:47:07.747 回答
1

您可以使用触发器在insert

delimiter |
CREATE TRIGGER update_root AFTER INSERT on posts
FOR EACH ROW
BEGIN
    if NEW.parent_id IS NULL 
    then 
        SET NEW.root_id =  NEW.id;
    end if;
END
|
delimiter ;
于 2013-03-31T13:47:25.937 回答
0

我只是想到了一个整洁的并测试了它。它似乎有效,但在某些情况下它可能会出错?

INSERT INTO posts ( root_id, parent_id ) VALUES ( LAST_INSERT_ID() + 1, NULL );

这有什么问题或缺点吗?

于 2013-03-31T13:53:39.033 回答