下面是我的表格的最小版本:
CREATE TABLE posts (
id int unsigned PRIMARY KEY auto_increment,
root_id int unsigned,
parent_id int unsigned
);
数据采用树形结构,因此parent_id
字段包含最明显的内容,而root_id
字段包含根帖子的id,即树中最顶层的帖子,也就是树中最古老的祖先。
有没有一种方法可以将相同的id
值插入到root_id
中?
提前谢谢。
发布于 2013-03-31 13:47:08
你可以这样做
INSERT INTO
posts
SET
root_id = (SELECT Auto_increment FROM information_schema.tables WHERE table_name = 'posts');
参见fiddle。
发布于 2013-03-31 13:47:26
您可以使用触发器在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-31 13:53:39
我只是想了一个整洁的,并进行了测试。它似乎可以工作,但在某些情况下,它可能会出错?
INSERT INTO posts ( root_id, parent_id ) VALUES ( LAST_INSERT_ID() + 1, NULL );
这有什么问题或缺点吗?
https://stackoverflow.com/questions/15729991
复制