我正在用OOP(仍在学习)PHP编写我自己的简单图库脚本。
我正在尝试以最有效的方式从数据库中提取相册,因为当前的图库脚本(Gallery2)资源非常庞大,这将取代它。目前的画廊大约有35,000件商品和大约100张专辑。
album layout http://iforce.co.nz/i/maxxwope.4tm.png
正如您在上面的图片中看到的,我需要无限的子专辑(实际上可能只有5-6个)。
数据库布局非常简单,因为它只需要显示图像。
相册表 album_id(int / auto_increment) album_parent(int) album_name(tingtext)
项目表 item_id(int / auto_increment) item_album(int) item_name(int)
我刚刚提出的几个查询基于使用WHERE语句并取消父相册ID,例如..
父ID 0 =最高级别 父ID 3将获取作为该ID的父级的所有专辑。
我遇到的问题是我想使用相册(album_1 / subalbum_1 / etc)名称和subalbums构建面包屑和URL,使用当前查询我无法一次性完成所有操作。
除非我忽略了某些内容,否则网址需要像script.php?album_id = 1& album_id = 3& album_id = 6才会抓住它们,好像1是顶级,3是sub,6是a 3分。
我已经阅读了很多关于层次结构设置的文章,但大多数是针对树层次结构布局的,我不需要为每个专辑更多地显示所有专辑的子专辑,而不是单个路径层次结构。
由于
编辑 我想我应该指出专辑名称可以命名为任何内容,日期仅用于命名而不是实际时间戳等。抱歉
答案 0 :(得分:3)
检索路径为 ianhales 建议但将其存储到数据库表中,然后从那里检索以显示。
因此将当前节点路径存储到表中,并且只有在移动时,重命名节点才需要更新路径。
这种方式读取效率会更高。
答案 1 :(得分:2)
如果我理解你的问题,你想要从叶子(例如“第2天”)到树根(相册数据)的路径。
如果这是对的,那么这个问题的答案应该是: mysql + php retrieve leaf children with path
答案 2 :(得分:1)
考虑使用MPTT表作为相册,然后您可以根据需要为其命名,并具有无限制/不受限制的嵌套。然后,您可以通过ID将图片添加到相册。您可以使用拖放界面管理此类表。它们适合快速阅读,更新速度慢。
至于数据,
专辑表:album_id(mediumint / unsigned auto_increment),lft(mediumint / unsigned),rgt(mediumint / unsigned)album_name(tingtext?)
items表:item_id(mediumint / unsigned auto_increment)item_album_id(mediumint / unsigned)item_name(varchar)
因为你可能超过65000件物品/专辑,但似乎不太可能超过1600万件。
修改强>
如果使用好的工具,可以减少学习曲线。请参阅http://mjsarfatti.com/sandbox/nestedSortable/和https://github.com/mjsarfatti/nestedSortable toArray()
方法为您提供了存储在数据库中的值。您可以使用sortable()
之类的标准jQuery UI update
事件来更改隐藏的输入。
选择树木或其部分基本上按left
值排序。对于子树,您还可以将项目限制为left
之间的项目,这些项目位于父left
和right
值之间。你也可以像depth <= parent_depth + number_of_levels_down
那样限制(相对)深度。
要显示从db作为层次结构获得的平面列表,可以使用堆栈记录上一项的深度。在迭代这些项目时,您可以使用它来创建更深入的html标记,并在深度减少时关闭标记。