Php MySql修改了预订单树以创建url

Php MySql修改了预订单树以创建url,php,mysql,database-design,content-management-system,seo,Php,Mysql,Database Design,Content Management System,Seo,这个问题是基于我先前的问题。这一次,我尝试使用修改的预排序树方法为pages表中的所有行生成URL 以下是MySql表:[注意:我添加了'parent'列只是为了让查看者了解category表中的父子关系。实际修改的Preorder Tree方法不使用parent列(父子关系)] : 我正在尝试编写一个mysql查询,该查询将使用生成以下输出的category表为pages表中的所有行生成URL 预期行数: 下面是我在分类表上尝试的内容。下面的SQL查询检索类别表中标题“oops”的单个路

这个问题是基于我先前的问题。这一次,我尝试使用修改的预排序树方法为pages表中的所有行生成URL

以下是MySql表:[注意:我添加了'parent'列只是为了让查看者了解category表中的父子关系。实际修改的Preorder Tree方法不使用parent列(父子关系)]

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

预期行数:

下面是我在分类表上尝试的内容。下面的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;

像这样的东西应该足够了

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;

您使用的聚合函数没有GROUPBY子句。这是基于文章中的一个示例吗?@是的,正确,我指的是显示如何检索单个路径的部分。有没有其他方法可以在不使用聚合函数的情况下编写查询来为pages表中的所有行生成URL?@这只是为了让查看者理解而添加的,我已经在上面的问题中为查看者添加了一个注释。按目录排序真棒!!!它很有魅力。您能建议我使用哪种方法来处理大量行(百万行)吗?或者这是你查询的结果这可能对其他人也有帮助优化不是我的事
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;