mysql中的递归slug url

时间:2017-09-14 11:15:13

标签: mysql recursion

我正在寻找mysql查询/函数来在自联接mysql表中构建slug url递归

enter image description here

我需要slug term id = 4 category-2/category-2-1是{{1}}

1 个答案:

答案 0 :(得分:0)

与更重的数据库系统不同,MySQL不支持像递归CTE /查询这样的任何东西。但是我们可以通过执行一定数量的自连接来模拟递归查询:

SELECT
    CASE WHEN t3.slug IS NOT NULL
         THEN CONCAT(t3.slug, '/', t2.slug, '/', t1.slug)
         WHEN t2.slug IS NOT NULL
         THEN CONCAT(t2.slug, '/', t1.slug)
         ELSE t1.slug END AS slug
FROM yourTable t1
LEFT JOIN yourTable t2
    ON t1.term_id = t2.id
LEFT JOIN yourTable t3
    ON t2.term_id = t3.id
WHERE t1.id = 4;

<强>输出:

    slug
1   category-2/category-2-1

在这里演示:

Rextester

在演示中,您可以删除WHERE条件,以查看是否为表中的每个条目形成了正确的路径。如有必要,扩展此查询以在层次结构中更深入也很容易。