mysql - 使用父 ID 从单个表中选择和连接数据

标签 mysql

<分区>

我有一个包含以下数据的数据库表 (Support_help_topic):

topic_id | topic_pid | topic

我希望能够做的是选择一个帮助主题,然后获取其所有父主题并将它们连接在一起。

以下面的例子为例。

有几个家长帮助主题:事件、请求、一般支持

这些父主题中的每一个都可能有几个子主题,并且子主题下可能有其他主题。

下面是一个完整的帮助主题路径的例子

事件/软件/Microsoft Outlook

事件可能有一个

  • topic_id 为 1
  • topic_pid 为 0(它是顶级主题)

软件可能有一个

  • topic_id 为 20
  • topic_pid 为 1(其父级为事件)

Microsoft outlook 可能有一个

  • topic_id 为 34
  • topic_pid 为 20(其父级为软件)

在每种情况下,我都需要在单个选择语句中获取以下任一内容:

如果主题有 parent ,我需要得到: - Top_Level_Topic/主题

如果主题没有 parent ,我需要得到:

  • 主题

我被困在这个问题上,我不知道从哪里开始。

在此先感谢您的帮助。 非常乐意提供所需的额外信息。

最佳答案

我最终使用了以下内容:

SELECT
    CASE
        WHEN t2.topic IS NULL then t1.topic
        WHEN t3.topic IS NULL then concat(t2.topic, ' / ', t1.topic)
        ELSE concat(t3.topic, ' / ', t2.topic, ' / ', t1.topic)
    END as help_topic
FROM 
    Support_help_topic AS t1
LEFT JOIN 
    Support_help_topic AS t2 ON t2.topic_id = t1.topic_pid
LEFT JOIN 
    Support_help_topic AS t3 ON t3.topic_id = t2.topic_pid
where 
    t1.topic_id = `supptick`.`topic_id`

关于mysql - 使用父 ID 从单个表中选择和连接数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54335751/

相关文章:

mysql - 使用 JOIN 时如何删除 MySQL 中的重复行

mysql - SQL 内部加入基于最新时间戳的唯一条目

mysql - Bluemix Secure Gateway JDBC 连接到 MySQL 数据库

php - 双左连接查询需要优化

mysql - 在另一个查询中使用查询结果

MySql 在更新和插入时挂起

php - 在元标记中显示动态标记

php - MySQL全连接三表

mysql - 在 MySQL 表的单个列上是否有任何特定使用具有不同索引名称的多个索引

MySQL 使用了不正确的索引。为什么?