我有一个包含这些字段(id
、parentID
、name
、content
)的 MySQL 页面表.
页面层次结构是:
- About Us - History - 2000 - 2001
如果我在“2001”页面上,我如何创建一个查询来查找此页面的顶级祖先是“关于我们”?
最佳答案
一旦您重新设计表格以遵循 Nested Sets模型,查询将是
SELECT parent.name
FROM pages AS node,
pages AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.name = '2001'
ORDER BY parent.lft
LIMIT 1
这会给你“关于我们”
如果您只允许特定级别的嵌套,您可以像该页面上显示的示例那样做一堆左连接:
SELECT t1.name AS lev1, t2.name as lev2, t3.name as lev3, t4.name as lev4
FROM category AS t1
LEFT JOIN category AS t2 ON t2.parent = t1.category_id
LEFT JOIN category AS t3 ON t3.parent = t2.category_id
LEFT JOIN category AS t4 ON t4.parent = t3.category_id
WHERE t4.name = 'FLASH';
但是如果你想支持任意深度的嵌套,嵌套集是唯一的选择。花时间通读整页。它可能比您希望的更复杂,但一旦您了解它的工作原理,它就会非常强大。
关于MySQL查询页面祖先,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6419374/