多个表中的分层数据

时间:2016-01-30 00:30:10

标签: mysql sql hierarchical-data forum

好的,这是我读完几小时后的第一次尝试。 我有一个分层的数据结构,发现这个主题之前已经问过,也有很多人找到了解决问题的方法。

我遇到的问题似乎没有得到解答,或者我无法找到它。 正如已经说过的那样,我花了很长一段时间才问我的玻璃谷歌,尤其是那些。

首先,我有一组定义的表(在我的例子中为3)来代表一个论坛,称为[论坛],[线程], [帖子]。

论坛和主题大多只是维护结构的理论结构。从正常化的角度来看(谢谢,学校......),这似乎是有道理的。

另一侧的帖子包含我想要检索的实际信息。

为简单起见,我将跳过与数据结构无关的字段。

论坛会有字段[ id:PK ],[父级:FK - > forum.id ]和[名称]。

线程将[ id:PK ],[父级:FK - > forum.id ]和[主题]。

帖子最后会有[ id:PK ],[父级:FK - > thread.id ],[内容],[日期]。

我想要实现的是

  1. 在任何给定的论坛(按ID)中找到包含最新日期的帖子(我将它们存储为时间戳)。
  2. 查找任何给定论坛下方的帖子数量,包括给定论坛及其中所有主题内的论坛(递归)。
  3. 之前我解决了这个问题,但最终使用底层编程语言来定义递归逻辑,从而导致大量查询,从而轻松地损害性能。

    我在单个表中读到了树遍历,但不确定是否有办法将其扩展到多个表。

    我认为要走的路是存储过程,我开始阅读,但似乎我几乎无法围绕这个主题。如果这个 IS 解决方案,我会很感激一些提示,如何开始这个。 一个有效的解决方案也很好。

    请注意:如果您为此发布了一个有效的解决方案,请求您,不要只是向我扔一些SQL,尝试解释这是如何工作的。 没有什么比使用代码更痛,你不明白。每当我需要这样的东西时,我也需要回来。

    到目前为止,提前感谢,如果您需要更多信息,请随时告诉我!

    编辑:我所拥有的图形表示。

    View of relations

    我还准备了一些样本数据以供解释:

    forums:
    +----+--------+---------+
    | id | parent | name    |
    +----+--------+---------+
    |  1 |   NULL | Forum 1 |
    |  2 |      1 | Forum 2 |
    |  3 |      1 | Forum 3 |
    |  4 |      2 | Forum 4 |
    +----+--------+---------+
    
    threads:
    +----+--------+----------+
    | id | parent | topic    |
    +----+--------+----------+
    |  1 |      1 | Thread 1 |
    |  2 |      2 | Thread 2 |
    |  3 |      2 | Thread 3 |
    |  4 |      3 | Thread 4 |
    |  5 |      3 | Thread 5 |
    |  6 |      4 | Thread 6 |
    +----+--------+----------+
    
    posts:
    +----+--------+----------------+------+
    | id | parent | content        | date |
    +----+--------+----------------+------+
    |  1 |      1 | Some Content 1 |    1 |
    |  2 |      1 | Some Content 2 |    2 |
    |  3 |      2 | Some Content 3 |    3 |
    |  4 |      3 | Some Content 4 |    4 |
    |  5 |      4 | Some Content 5 |    5 |
    |  6 |      4 | Some Content 6 |    6 |
    |  7 |      6 | Some Content 7 |    7 |
    +----+--------+----------------+------+
    

    获取论坛1下面的最新帖子将是相当微不足道的,但是从论坛3获取最新帖子是我挣扎的一件事(在这种情况下,最后一篇文章将是id = 6的帖子)。 / p>

    论坛1下面的帖子数量也是帖子的总数,但是例如获得论坛2下面的帖子数量会产生6。 据我所知,这需要递归遍历数据,但我不确定如何做到这一点。 其中一条评论提到了一个类似于单个表格的内容,但我很感激能够在正确的方向上采取一些措施如何使其适应多个表格。

0 个答案:

没有答案
相关问题