有两个MySQL表,第一个存储根据邻接列表模型构建的树,第二个是存储每个节点路径的辅助表。
问题是/是如何设置触发器,以便在邻接表中插入后,将存储路径记录的记录插入到辅助表中。
这个想法与此处相同:https://kod34fr33.wordpress.com/2008/05/06/adjacency-list-tree-on-mysql/ 但有以下不同之处:
表格结构:
$subtitles = Subtitles::load('subtitles.srt'); // load file
$subtitles->time(2); // add 2 seconds
$subtitles->save('new-subtitles-file.srt');
,id
,parent
。name
,id
path
,id
是SMALLINT(3)UNSIGNED parent
是TEXT。在对我的初始代码进行多次更正后,我可以纠正语法错误。 所以,这里有一个可能的解决方案用于MariaDB(也可能用于MySQL),希望它可以帮助其他人:
path
答案 0 :(得分:0)
嗯,这是我到目前为止所发现的。您没有与THEN
相关的关键字IF
,也没有END
而不是END IF
。 DECLARE
的语法错误,您无法设置默认值。另外,不知道@@ ROWCOUNT是什么。 (编辑:发现它,它与MS SQL Server有关,但在MySQL中没有使用。)
DELIMITER //
CREATE TRIGGER insertProdCatPathRecord AFTER INSERT ON prefix_productcategories
FOR EACH ROW
BEGIN
IF (NEW.parent > 0) THEN
DECLARE path_of_parent TEXT;
SET path_of_parent='';
SELECT path INTO path_of_parent FROM prefix_prodcat_path WHERE prefix_prodcat_path.id= NEW.parent;
IF (@@ROWCOUNT) THEN
INSERT INTO prefix_prodcat_path VALUES(NEW.id,CONCAT(NEW.parent,'.',NEW.id));
ELSE
INSERT INTO prefix_prodcat_path VALUES(NEW.id,NEW.parent);
END IF;
END IF;
END;
//
DELIMITER ;