我正在使用邻接列表模型在 MySQL 数据库中存储(非常动态的)树结构。我需要一种方法来选择给定节点的所有后代,最好是通过对存储例程的一次调用。我知道嵌套集模型会让这件事变得简单,但它会让其他事情变得非常困难,所以不幸的是它不是我的选择。这是我到目前为止所得到的:
DELIMITER //
CREATE PROCEDURE get_descendants(node_id INT)
BEGIN
DROP TEMPORARY TABLE IF EXISTS descendants;
CREATE TEMPORARY TABLE descendants (id INT, name VARCHAR(100), parent_id INT);
INSERT INTO descendants
SELECT *
FROM nodes
WHERE parent_id <=> node_id;
-- ...?
END//
DELIMITER ;
这个想法是继续向下钻取并将子代附加到后代表,直到我到达叶子。然后我可以从程序外部访问临时表......我希望。(我不能从存储的函数返回结果集,这真的很糟糕。)
我需要以某种方式遍历结果并为每一行发出一个新的 SELECT 语句。我读过游标在这里可能会有所帮助,但我不知道如何。似乎使用游标您必须预先选择所有内容,然后进行迭代。