gpt4 book ai didi

PHP/MySQL/??? - 组织文章和任意深度的子文章,其中可以检索任何文章,以及所有 parent 和 child

转载 作者:行者123 更新时间:2023-11-29 05:38:05 25 4
gpt4 key购买 nike

我将拥有一个文章或页面数据库,有点像 wiki 页面。所有文章名称都需要是唯一的,就像 wiki 页面一样。它们将以灵活深度的层次结构进行组织,其中每篇文章都可以是多篇其他文章的子篇或父篇——所有类别都由文章表示。

用户应该能够直接跳转到任何页面——也许通过输入其唯一名称(在主页上的框中,或 domain.com/articles/name),或搜索并选择一个结果,或点击另一篇文章的链接。但是,他们还应该能够深入了解类别,当前文章所属的所有类别的面包屑都可见(通常不应超过 2 或 3 个),并且能够查看所有(或尽可能多的)合理)子文章。

例如,可能有:

  • 人员
      • 鲍勃
      • 吉姆
      • 爱丽丝
      • 莎莉
    • 员工
      • 鲍勃
      • 莎莉
  • 食物
    • 食物
      • 零食
        • 筹码
          • 盐和醋
          • 酸奶油和洋葱
        • 爆米花
      • 披萨
      • 寿司
      • 汽水
        • 可乐
        • 根汁啤酒
      • 果汁
        • 苹果汁
        • 橙汁
        • 葡萄汁

例如,如果有人访问 Bob 的页面,他们将看到关于 Bob 的所有信息,以及:

Parents:
Articles > People > Male > (Bob)
Articles > People > Employees > (Bob)
Children:
(none)

如果有人访问零食页面,他们会看到有关零食的文章,以及:

Parents: 
Articles > Edibles > Food > (Snacks)
Children:
(Snacks) > Chips
(Snacks) > Chips > Salt & Vinegar
(Snacks) > Chips > Sour Cream & Onion
(Snacks) > Popcorn

我什至不知道从哪里开始,在这里。关于设置 SQL 表来执行此操作,我手上会有什么样的噩梦,这些查询会是什么样子?我计划实现某种缓存,但我宁愿不必依赖它来提高性能。为了让普通共享主机正常运行,并避免混淆我的数据库,我宁愿将所有这些都保存在 MySQL 或 PostgreSQL 中,这对于站点的其余部分是必需的。 PHP 将用于站点的其余部分,并且我想在有意义的时候将我能做的任何工作卸载到 PHP 中。如果另一种技术(例如非关系数据库)可以大大简化此操作,我也许可以使用它。

我已经看到第 1 条的问题 > 第 2 条 > 第 1 条导致了可怕的问题,但我认为仅仅不允许一篇文章将其祖先之一列为 child 有什么害处。

除了首先帮助我弄清楚如何实现所有这些之外,还有其他我遗漏的主要陷阱吗?

最佳答案

这很简单,真的,它是一棵普通的树。 :)
此表架构如下所示:

id            unique id, perhaps the unique name
parent_id id of parent element
lft MPTT left field
rght MPTT right field
... any other fields you like

INDEX UNIQUE(id)

就是这样。每篇文章只有一篇父文章。顶部元素可以将 NULL 作为其父 id,或者只有一个顶部节点带有 NULL,所有其他文章都是其子节点。这取决于您的喜好。这实际上就是您所需要的,但为了简化记录的获取,您将在 MPTT 逻辑中使用 lftrght 字段。阅读this introductory article了解他们的目的。使用这些字段,您还可以避免通过一次简单的检查将条目设置为它自己的 child 的 child 。

关于PHP/MySQL/??? - 组织文章和任意深度的子文章,其中可以检索任何文章,以及所有 parent 和 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9044323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com