相关疑难解决方法(0)

将平台解析成树的最有效/优雅的方法是什么?

假设您有一个存储有序树层次结构的平面表:

Id   Name         ParentId   Order
 1   'Node 1'            0      10
 2   'Node 1.1'          1      10
 3   'Node 2'            0      20
 4   'Node 1.1.1'        2      10
 5   'Node 2.1'          3      10
 6   'Node 1.2'          1      20
Run Code Online (Sandbox Code Playgroud)

这是我们所拥有的图表[id] Name.根节点0是虚构的.

                       [0] ROOT
                          /    \ 
              [1] Node 1          [3] Node 2
              /       \                   \
    [2] Node 1.1     [6] Node 1.2      [5] Node 2.1
          /          
 [4] Node 1.1.1

您将使用什么简约方法将其输出为HTML(或文本,就此而言)作为正确排序,正确缩进的树?

进一步假设你只有基本的数据结构(数组和散列图),没有带有父/子引用的花哨对象,没有ORM,没有框架,只有你的双手.该表表示为结果集,可以随机访问.

伪代码或普通英语是可以的,这纯粹是一个概念性的问题.

额外问题:在RDBMS中存储这样的树结构是否有根本更好的方法?


编辑和补充

回答一个评论者(Mark Bessey的)问题:根节点不是必需的,因为它永远不会被显示.ParentId = 0是表示"这些是顶级"的惯例.Order列定义了如何对具有相同父节点的节点进行排序.

我所谈到的"结果集"可以被描绘成一组哈希图(保留在该术语中).因为我的例子意味着已经存在.有些答案会加倍努力并首先构建它,但那没关系.

树可以任意深.每个节点可以有N个子节点.不过,我并没有考虑到"数百万条目".

不要将我选择的节点命名('Node 1.1.1')误认为是依赖的东西.节点同样可以称为"Frank"或"Bob",不暗示命名结构,这只是为了使其可读. …

sql algorithm tree recursion hierarchical-data

508
推荐指数
8
解决办法
11万
查看次数

在数据库中存储有序列表的最佳方法?

在数据库中存储"有序列表"的最佳方法是什么,以便更新它们(添加,删除和更改条目的顺序)很容易?

考虑一个数据库,其中包含用户和电影的表格.每个用户都有一个喜欢的电影列表.

由于许多用户可以喜欢同一部电影,因此我将用户和电影分开,并使用第三张表连接它们,即用户电影.

usermovies包含用户和电影的ID以及"订单号".订单号用于为用户订购电影列表.

例如,用户Josh可能具有以下列表:

  1. 普罗米修斯
  2. 黑衣人3
  3. 独裁者

和用户杰克可能有一个列表,如:

  1. 独裁者
  2. 普罗米修斯
  3. 主力舰
  4. 白雪公主与猎人

因此,他们分享一些收藏,但不一定按照相同的顺序.

我可以使用查询获取每个用户的电影ID列表:

SELECT movie_id FROM usermovies WHERE user_id =? ORDER BY order_number
Run Code Online (Sandbox Code Playgroud)

然后,使用有序的movie_ids,我可以使用另一个查询获取电影列表

SELECT name FROM movies WHERE id in (?,?,?) ORDER BY FIELD (id, ?,?,?)
Run Code Online (Sandbox Code Playgroud)

所以查询工作,但更新列表现在看起来真的很复杂 - 是否有更好的方法来存储这些信息,以便很容易获得用户x的电影列表,添加电影,删除它们并更改列表的顺序?

mysql database-design

19
推荐指数
2
解决办法
9765
查看次数

在mysql表中排名条目

我有一个包含许多行的MySQL表.该表有一个受欢迎的列.如果我按人气排序,我可以得到每个项目的排名.是否可以在不对整个表进行排序的情况下检索特定项目的等级?我不这么认为.那是对的吗?

另一种方法是创建一个用于存储排名的新列,对整个表进行排序,然后遍历所有行并更新排名.这是非常低效的.有没有办法在单个查询中执行此操作?

mysql sorting ranking

5
推荐指数
1
解决办法
5684
查看次数

交换SQLite数据库中的项目顺序

我从Sqlite数据库中的项目表中检索有序的项目列表.我如何交换id以使Sqlite数据库表中的两个项的顺序?

sql sqlite iphone ipad ios

3
推荐指数
1
解决办法
1567
查看次数