PHP& MySQL - 只需一个查询即可获得顶级类别

时间:2011-09-28 14:27:15

标签: php mysql hierarchical-data

我试图通过MySQL的一个查询从子类别(可能是任何级别)获取第一个类别(级别0,没有父级)。这可能吗?

这是一个示例DB结构:

Table categories

    id (INT 11)
    parent (INT 11, zero if it has no parent)
    name

修改MPTT会更容易解决问题吗?

2 个答案:

答案 0 :(得分:2)

是的,stored functionrecursion。你可能会遇到无休止的循环,所以要小心。

答案 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}