【问题标题】:MySql Modified preorder tree to create urlMySql 修改预排序树以创建 url
【发布时间】:2013-12-23 17:19:03
【问题描述】:

这个问题是基于我之前在stackoverflow 上提出的问题。这次我尝试使用 Modified Preorder Tree 方法为 pages 表中的所有行生成 url。

这里是MySql表: [注意:我添加了'parent'列,只是为了让观众了解类别表中的父子关系。实际的Modified Preorder Tree方法不使用父列(父子关系)]

Category table

Pages table

我正在尝试编写一个 mysql 查询,该查询将使用产生以下输出的类别表为 pages 表中的所有行生成 URL。

预期行数:

/content/article/array/oops/classes
/content/article/array/oops/objects
/content/article/php/index
/content/article/php/quiz
/content/article/php/strings/strstr
/content/article/php/strings/str_substr
/content/blog/something1
/content/blog/something2
/content/blog/java/test-java
/content/blog/java/final-method
/content/about-us
/content/contact-us

这是我在类别表上尝试的参考Managing Hierarchical Data in MySQL。下面的 SQL 查询检索类别表中标题“oops”的单个路径。

SELECT concat('/',group_concat(parent.title separator '/')) as url
FROM category AS node, category AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.title = 'oops'
ORDER BY parent.lft;

【问题讨论】:

  • 好吧,您使用的是没有 GROUP BY 子句的聚合函数。这是基于文章中的一个例子吗?
  • @Strawberry 是的,我指的是显示如何检索单个路径的部分。有没有其他方法可以在不使用聚合函数的情况下编写查询来为 pages 表中的所有行生成 url?
  • @Strawberry 只是添加给观众理解,我现在在上面的问题中为观众添加了注释。
  • 按目录排序sqlfiddle.com/#!2/1a0f9/7

标签: php mysql database-design content-management-system seo


【解决方案1】:

这样的东西就足够了……

SELECT CONCAT_WS('/',x.path,y.page_name) full_path
  FROM
     ( SELECT node.id, GROUP_CONCAT(parent.title ORDER BY parent.lft SEPARATOR '/') path
         FROM category node
         JOIN category parent
           ON node.lft BETWEEN parent.lft AND parent.rgt
        GROUP 
           BY node.title
        ORDER 
           BY node.lft
     ) x
  JOIN pages y
    ON y.category_id = x.id;

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-01
  • 1970-01-01
相关资源
最近更新 更多