使用递归CTE确定记录是否是另一个记录的后代

时间:2018-03-22 16:00:52

标签: mariadb common-table-expression hierarchical-data recursive-query

下表列出了使用说明书中的主题。除了作为根的var array = ["Anna 0.4", "Peter 0.25", "Anna 0.5", "Peter 0.5", "Peter 0.33", "Foo 1.08"], count = Object.create(null), winner; array.forEach(s => { var [k, v] = s.split(' '); count[k] = (count[k] || 0) + +v; }); winner = Object .keys(count) .reduce((r, k) => { if (!r || count[k] > count[r[0]]) { return [k]; } if (count[k] === count[r[0]]) { r.push(k); } return r; }, undefined); console.log(winner); console.log(count);的记录id之外,每个主题都有一个父主题。该应用程序允许除根主题之外的所有主题都更改父级,我将需要阻止将祖先分配为其自身的后代。

例如,记录#2的父级不应从1更改为1

如何确定记录是否是另一条记录的后代?我宁愿不“硬编码”后代的数量。请注意,我实际上正在使用mariaDB。

7

1 个答案:

答案 0 :(得分:0)

如果id为6的记录是id为2的记录的后果,则以下查询将返回大于零的计数。

WITH RECURSIVE ancestors AS (
SELECT * FROM manual WHERE id=2
UNION
SELECT m.*
FROM manual m
INNER JOIN ancestors a ON a.id=m.parent_id
)
SELECT COUNT(*) FROM ancestors WHERE id=6;