当前位置: 首页 > 面试题库 >

存储树数据的快速关系方法(例如,文章的主题注释)

施雅懿
2023-03-14
问题内容

我有一个可存储对文章的评论的cms。这些注释可以是线程的,也可以是非线程的。尽管从技术上讲,它们是相同的,只是在没有线程的情况下将reply列留为空白。我的应用程序可在sqlLite,MySQL和pgsql上运行,因此我需要相当标准的SQL。

我目前有一个评论表

comment_id
article_id
user_id
comment
timestamp
thread (this is the reply column)

我的问题是弄清楚如何最好地表示数据库中的线程注释。也许是在一个单独的表中,该表支持没有内容的树集,而一个简单的表用于保存文本?也许已经是这样了?也许是另一种方式?

如果注释是非线程化的,那么我可以轻松地按时间戳排序。

如果它们是螺纹的,我会像这样排序

ORDER BY SUBSTRING(c.thread, 1, (LENGTH(c.thread) - 1))

从ORDER BY中可以看到,注释查询永远不会使用索引,因为基于函数的索引仅真正存在于Oracle中。帮我快速浏览快速评论页面。


问题答案:

我真的很喜欢Drupal如何解决这个问题。它为每个注释分配一个线程ID。对于第一个评论,此ID从1开始。如果在此评论中添加了回复,则会为其1.1分配ID
。对评论的答复1.1被赋予线程ID 1.1.1。注释同胞1.1被赋予线程id
1.2。你明白了。添加注释后,只需一个查询即可轻松计算出这些线程ID。

呈现线程时,将在单个查询中获取属于该线程的所有注释,并按线程ID对其进行排序。这使您可以按升序排列线程。此外,使用线程ID,您可以找到每个注释的嵌套级别,并相应地对其进行缩进。

1
1.1
1.1.1
1.2
1.2.1

有一些问题需要解决:

  • 如果线程ID的一个组成部分增加到2位,则按线程ID排序将不会产生预期的顺序。一个简单的解决方案是确保线程id的所有组件都用零填充以具有相同的宽度。
  • 按降序线程ID排序不会产生预期的降序。

Drupal使用称为vancode的编号系统以更复杂的方式解决了第一个问题。至于第二个问题,可以通过在按降序排序时在线程id后面附加反斜杠(其ASCII码高于数字)来解决。您可以通过查看注释模块的源代码找到有关此实现的更多详细信息(请参见函数comment_get_thread之前的大注释)。



 类似资料:
  • 以最快和最简单的方式,我希望二进制数据在Kafka消息日志可视为十六进制字符串值。 我有以下数据,其中包含二进制形式的CAN消息,我希望将其视为十六进制字符串 数据源使用kafka_2.11-0.11.0.1提供用于使用数据的文档,但可能是由于版本不匹配。tgz步骤失败。https://www.isoblue.org/docs/data/data/ 试图直接查看数据,我有: 1.玩了kafka.t

  • 本文向大家介绍Python快速从注释生成文档的方法,包括了Python快速从注释生成文档的方法的使用技巧和注意事项,需要的朋友参考一下 作为一个标准的程序猿,为程序编写说明文档是一步必不可少的工作,如何才能写的又好又快呢,下面我们就来详细探讨下吧。 今天将告诉大家一个简单平时只要注意的小细节,就可以轻松生成注释文档,也可以检查我们写的类方法引用名称是否重复有问题等。 一看别人专业的大牛们写的文档多

  • 我在谷歌上搜索过,找不到任何可以在O(1)时间内存储和读取双向数据的DS。例如书籍和作家。有了书的名字,就必须找到作者。有了作者的名字,就必须找到书。 在数据库中,这些关系(如联接表)是如何存储的? 提前谢谢。

  • 本文向大家介绍php快速导入大量数据的实例方法,包括了php快速导入大量数据的实例方法的使用技巧和注意事项,需要的朋友参考一下 PHP快速导入大量数据到数据库的方法 第一种方法:使用insert into 插入,代码如下: 最后显示为:23:25:05 01:32:05 也就是花了2个小时多! 第二种方法:使用事务提交,批量插入数据库(每隔10W条提交下)最后显示消耗的时间为:22:56:13 2

  • 本文向大家介绍Android用文件存储数据的方法,包括了Android用文件存储数据的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Android用文件存储数据的具体代码,供大家参考,具体内容如下 存储数据示例: 从文件读取数据: 注意: 1. openFileOutput()方法有两个参数: 第一个是文件名,可以不包含路径,因为文件会默认存储到data/data/包名/fil

  • 本文向大家介绍android数据存储之文件存储方法,包括了android数据存储之文件存储方法的使用技巧和注意事项,需要的朋友参考一下 文件存储是 Android 中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有数据都是原封不动的保存到文件当中的。 概述 文件存取的核心就是输入流和输出流。 Android文件的操作模式 文件的相关操作方法 文件读写的实现 openFileOu