【问题标题】:PHP hierarchy / gallery systemPHP层次结构/画廊系统
【发布时间】:2012-05-30 13:45:52
【问题描述】:

我正在用 OOP(仍在学习)PHP 编写我自己的简单画廊脚本。

我正在尝试以最有效的方式从数据库中提取相册,因为当前的画廊脚本 (Gallery2) 资源非常繁重,这将取代它。目前的画廊有大约 35,000 件物品和大约 100 张专辑。


(来源:iforce.co.nz

如上图所示,我需要无限的子专辑(实际上最多可能只有 5-6 个)。

数据库布局非常简单,只需显示图像即可。

专辑表 专辑 ID (int/auto_increment) 专辑父(整数) 专辑名称(tingtext)

项目表 item_id (int/auto_increment) item_album (int) item_name (int)

我提出的几个查询都是基于使用 WHERE 语句并使用父专辑 ID 例如..

父 ID 0 = 顶级 父 ID 3 将获取所有以该 ID 为父的专辑。

我遇到的问题是我想使用专辑 (album_1/subalbum_1/etc) 名称和子专辑来构建面包屑和 URL,使用当前查询我无法一次全部提取它们。

除非我忽略了某些内容,否则 URL 需要像 script.php?album_id=1&album_id=3&album_id=6 这样才能抓住它们,就好像 1 是顶级,3 是子级,6 是 3 的子级一样。

我已经阅读了很多关于层次结构设置的文章,但大多数都是针对树层次结构布局的,我不需要为每个专辑一次显示所有专辑的子专辑,而是更倾向于单一路径层次结构。

谢谢

编辑 我想我应该指出,专辑名称可以任意命名,日期仅用于命名而非实际时间戳等。对不起

【问题讨论】:

标签: php mysql hierarchy


【解决方案1】:

按照 ianhales 的建议检索路径,但将其存储到数据库表中,然后从那里检索以显示。

所以将当前节点路径存入表中,只有在移动时,重命名节点才需要更新路径。

这样读取效率会更高。

【讨论】:

  • 这是一个很好的接触 - 我没有考虑过。
【解决方案2】:

如果我理解您的问题,您需要从叶子(例如“第 2 天”)到树根(专辑数据)的路径。

如果这是正确的,那么这个问题的答案应该是这样的: mysql + php retrieve leaf children with path

【讨论】:

  • 感谢您提供的链接。我会继续阅读,我认为我的问题解释得很糟糕,但很高兴您解决了问题 :)
【解决方案3】:

考虑为专辑使用MPTT 表,然后您可以随意命名它们并进行无限制/无限制的嵌套。然后,您可以通过 id 将图片添加到相册。您可以使用拖放界面管理此类表。它们适合快速阅读,较慢的更新。

至于数据,
专辑表:album_id (mediumint/unsigned auto_increment), lft (mediumint/unsigned), rgt (mediumint/unsigned) album_name (tingtext?)
项目表: item_id (mediumint/unsigned auto_increment) item_album_id (mediumint/unsigned) item_name (varchar)
Mediumint,因为您可能超过 65,000 个项目/专辑,但似乎不太可能超过 1600 万。

编辑:
如果你使用好的工具,你可以减少学习曲线。请参阅http://mjsarfatti.com/sandbox/nestedSortable/https://github.com/mjsarfatti/nestedSortable 您需要存储在数据库中的值由toArray() 方法为您提供。您可以使用标准 jQuery UI sortable() 事件,如 update 来更改隐藏的输入。

选择树或其部分,基本上是按left 值排序。对于子树,您还可以将项目限制为具有left 且介于父级的leftright 值之间的项目。您还可以通过(相对)深度进行限制,例如 depth <= parent_depth + number_of_levels_down

要将您从数据库中获得的平面列表显示为层次结构,您可以使用堆栈来记录前一项的深度。在迭代项目时,您可以使用它来创建打开的 html 标记(当它更深时)和关闭标记(当深度减小时)。

【讨论】:

  • 谢谢你,但是我一直在阅读 MPTT/嵌套集模型,但我似乎无法掌握它。
猜你喜欢
  • 2011-12-05
  • 1970-01-01
  • 2021-07-13
  • 2019-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-25
  • 2012-02-13
相关资源
最近更新 更多