mysql - mysql中的递归slug url

标签 mysql recursion

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

enter image description here

我需要term中的slug,其中id = 4category-2/category-2-1

最佳答案

与更重量级的数据库系统不同,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 条件,以查看是否为表中的每个条目形成了正确的路径。如有必要,还可以轻松扩展此查询以深入层次结构。

关于mysql - mysql中的递归slug url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46217634/

相关文章:

mysql - 在 MySQL 表中查找 "exotic"值

mysql - 计算重复项中的唯一值

mysql - 如果重复条目则插入更改值

javascript - vue.js - 使用原始 json 中的嵌套数组时,递归组件不会更新

c++ - 如何避免指针指向 '\0' 之后?

java - 用并行流替换 for 循环 - Java

mysql - 限制数据库关闭和打开时间的最佳实践是什么?

mysql - 需求变更 - 在单个数据库表字段中存储 2 个不同的值

c++ - 二叉搜索树析构函数

wpf - 查找包含隐藏节点和折叠节点的逻辑子节点