【问题标题】:mysql query to create SEO friendly url from given table structuremysql查询从给定的表结构创建SEO友好的url
【发布时间】:2013-11-29 07:02:49
【问题描述】:

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

Category table

Pages table

我正在尝试编写一个 mysql 查询,它将使用产生以下输出的类别表为 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

链接到SQL Fiddle

【问题讨论】:

  • 你检查过任何数据库递归吗?这看起来像是一个递归练习......只是说'
  • @hanzo2001 这是给 cms 的
  • @mahavir-munot,我相信你不能在不创建存储过程(它会递归调用自身)的情况下对任意 URL 深度执行此操作。
  • 以前有人问过这样的问题:stack overflow。在尝试这样做之前,您应该做更多的研究

标签: php mysql sql database seo


【解决方案1】:

这是我自己问题的答案:

我尝试使用“MySql Modified preorder tree to create url”方法,我发现它在查询优化和通过 stackoverflow 进行的其他研究方面更有用。

【讨论】:

    【解决方案2】:

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

    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
    

    【讨论】:

    • 是的,因为只有 3 个连接,您可以添加更多连接,但就像我说的,这不是最好的解决方案
    • 每个人都应该去看看另一个stackoverflow question
    • @hanzo2001 我可以使用左右方法,但我想看看有没有其他方法
    • 事情是这样的,你想通过一个平面(线性)数据表生成一个分层结构。我很抱歉这么说,但最好的(也是完整的)方法是通过递归。另一种方法是通过 邻接列表模型 一个 la @lgoel 样式
    猜你喜欢
    • 2016-11-16
    • 1970-01-01
    • 2013-06-19
    • 2014-11-06
    • 2014-12-04
    • 2011-06-11
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多