我试图通过MySQL
的一个查询从子类别(可能是任何级别)获取第一个类别(级别0,没有父级)。这可能吗?
这是一个示例DB
结构:
Table categories
id (INT 11)
parent (INT 11, zero if it has no parent)
name
修改:MPTT
会更容易解决问题吗?
答案 0 :(得分:2)
是的,stored function和recursion。你可能会遇到无休止的循环,所以要小心。
答案 1 :(得分:1)
只用一个查询扫描无限级别是不可能的,但如果你确定你的categoies树不会超过一定数量的级别你可以使用这个技巧,这是4个级别:
SELECT COALESCE(c4.parent, c3.parent, c2.parent, c1.parent)
FROM categories AS c1
LEFT JOIN categories AS c2 ON( c1.parent = c2.id )
LEFT JOIN categories AS c3 ON( c2.parent = c3.id )
LEFT JOIN categories AS c4 ON( c3.parent = c4.id )
WHERE c1.id = {someID}