Php mysql查询从给定的表结构创建SEO友好的url

Php mysql查询从给定的表结构创建SEO友好的url,php,mysql,sql,database,seo,Php,Mysql,Sql,Database,Seo,我正在尝试使用下表创建SEO友好的URL: 我正在尝试编写一个mysql查询,该查询将使用生成以下输出的category表为pages表中的所有页面生成URL 预期输出: 以下是我尝试生成最多4段URL的MySql查询: SELECT pg.id AS page_id, p3.id, p1.category AS segment1, p2.category AS segment2, p3.category AS segment3, pg.page_name AS PAGE , con

我正在尝试使用下表创建SEO友好的URL:

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

预期输出:

以下是我尝试生成最多4段URL的MySql查询:

SELECT pg.id AS page_id, p3.id, p1.category AS segment1, p2.category AS segment2, p3.category AS segment3, 
pg.page_name AS PAGE , concat( '/', p1.category, '/', p2.category, '/', p3.category, '/', pg.page_name, '/' ) AS url
FROM category AS p1, category AS p2, category AS p3, pages AS pg
WHERE pg.category_id = p3.id
AND p3.parent_id = p2.id
AND p2.parent_id = p1.id

链接到

不是最好的解决方案,但它是;)


以下是我自己问题的答案:


我尝试使用“”方法,我发现它在查询优化和stackoverflow的其他研究方面更有用。

是的,因为只有3个联接,可以添加更多联接,但正如我所说,这不是最好的解决方案每个人都应该去看看另一个@hanzo2001我可以使用左右的方法,但我想看看是否还有其他方法。问题是,你想通过一个平面(线性)数据表生成一个层次结构。我很抱歉这么说,但是最好的(完整的)方法是通过递归。另一种方法是通过邻接列表模型a la@lgoelstyle@hanzo2001请查看是否签出了任何数据库递归?这看起来像是一个关于递归的练习。。。只是说这是给你的cms@mahavir-munot,我相信如果不创建存储过程(它会递归地调用自己),就无法对任意URL深度执行此操作。在尝试这样做之前,你应该做更多的研究
SELECT pagetable.id AS page_id
, c1.id
, pagetable.page_name AS PAGE 
, concat( 
    IF(c3.category IS NULL,'','/')
  , IF(c3.category IS NULL,'',c3.category)
  , IF(c2.category IS NULL,'','/')
  , IF(c2.category IS NULL,'',c2.category)
  , IF(c1.category IS NULL,'','/')
  , IF(c1.category IS NULL,'',c1.category)
  , '/'
  , pagetable.page_name
  , '/' ) AS url
FROM pages AS pagetable 
LEFT JOIN category AS c1
ON pagetable.category_id = c1.id
LEFT JOIN category AS c2
ON c1.parent_id = c2.id
LEFT JOIN category AS c3
ON c2.parent_id = c3.id