我有一个脚本,我写回来评论,但它只是单线程.我希望它是多线程的,但只有这样用户才能回复评论,而不是用户可以回复评论的评论.所以线程只有两个深度.
目前我储存comment_id反对user_id在我的数据库.
我能想到做多线程注释的唯一方法是parent在注释表中有一个字段.但是如果我这样做,那么当我用PHP选择注释时,我将不得不做另一个SELECT命令来为每个注释选择注释子项(如果有的话).好像在数据库上做了很多工作.
一定有更好的方法.有什么想法吗?还是教程?
我在围绕SQL闭包表时遇到了一些困难,并希望在理解我找到的一些示例时提供一些帮助.
假设我有一个sample_items带有以下分层数据的表:
id name parent_id
1 'Root level item #1' 0
2 'Child of ID 1' 1
3 'Child of ID 2' 2
4 'Root level item #2' 0
Run Code Online (Sandbox Code Playgroud)
树结构应该是这样的:
id
| - 1
| | - 2
| | - 3
| - 4
Run Code Online (Sandbox Code Playgroud)
为了便于查询树(例如找到特定id的所有后代),我有一个表,sample_items_closure使用Bill Karwin在这个优秀的SO帖子中描述的方法.我还使用可选path_length列来在需要时查询直接子或父.如果我正确理解这个方法,我的闭包表数据将如下所示:
ancestor_id descendant_id path_length
1 1 0
2 2 0
1 2 1
3 3 0
2 3 1
1 3 2
4 4 0
Run Code Online (Sandbox Code Playgroud)
sample_items …
mysql tree recursion hierarchical-data transitive-closure-table
我有一个带有子节点(节点)的自定义LinkedTree,节点具有邻接关系,即每个节点与上一个节点和下一个节点链接.这个LinkedTree非常重,很大,可能包含数百万个节点.

这是一个代码示例:
package tree;
import java.io.Serializable;
public class LinkedTree<E> implements Serializable {
private int size = 0;
private Node<E> first;
private Node<E> last;
private LinkedTree<E> children;
public LinkedTree() {
children = new LinkedTree<>();
}
public LinkedTree(LinkedTree<E> children) {
this.children = children;
}
public void add(E element) {
final Node<E> l = last;
final Node<E> newNode = new Node<>(l, element, null);
last = newNode;
if (l == null)
first = newNode;
else
l.next = newNode;
size++;
}
public void remove(E element) …Run Code Online (Sandbox Code Playgroud) 我在数据库中有一个用户应该能够订购的列表.
itemname| order value (int)
--------+---------------------
salad | 1
mango | 2
orange | 3
apples | 4
Run Code Online (Sandbox Code Playgroud)
从数据库加载,我只是order by order_value.
通过拖放,他应该能够移动apples,使其出现在列表的顶部..
itemname| order value (int)
--------+---------------------
apples | 4
salad | 1
mango | 2
orange | 3
Run Code Online (Sandbox Code Playgroud)
好.所以现在在内部我必须更新每个列表项目!如果列表有20或100个项目,那么对于简单的拖动操作来说,这是很多更新.
itemname| order value (int)
--------+---------------------
apples | 1
salad | 2
mango | 3
orange | 4
Run Code Online (Sandbox Code Playgroud)
我宁愿只做一次更新.我想到的一种方式是"内部订单"是否为double值.
itemname| order value (double)
--------+---------------------
salad | 1.0
mango | 2.0
orange | 3.0
apples | …Run Code Online (Sandbox Code Playgroud) 假设我们有一个包含用户评论的表格.第一级评论引用了他们所附的文章.更深层次的注释没有设计引用,但它们引用了它的父注释.
对于这个数据库结构 - 获取给定文章的所有注释然后以html格式呈现它的最有效方法是什么?(假设我们有大约200条第一级的评论和最深的20级评论)
我在我的网络应用程序上使用mysql.应用程序表包含一个supervisor表和一个employee表.员工表包含有关每个员工的信息.主管表包含两列,如下所示.
supervisor_id -> which is employee id of the supervisor
subordinate_id -> which is the employee id of the subordinate.
Run Code Online (Sandbox Code Playgroud)
每个下属可以有多个主管,一个主管下属可以是其他员工的主管.所以表格记录可以跟随.
supervisor_id | subordinate_id
1 | 2
1 | 3
2 | 4
4 | 5
3 | 6
3 | 4
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,有一个监督链.主管1有2个,3个,4个,5个和6个作为他的下属.主管2有4,5作为下属.而且它也可以为下属提供多个主管.
当我查询主管2的所有下属时,我现在使用如下的查询.
public function getSubordinate($id) {
$query = "SELECT * FROM supervisor WHERE subordinate_id = $id";
// get results and return
}
Run Code Online (Sandbox Code Playgroud)
所以我现在所做的是首先发送id为2以获得它的直接下属.然后,对于每个生成的下属,我一次又一次地运行查询以获得完整的下级链.
对于少量数据,这是可以的.但是这个主管表将有数千个数据,因此我必须进行数千次查询才能找到主管链,并且需要时间才能给出结果.
由于下属可以有多个主管,因此嵌套集不会是一个确切的答案.
我也经历过这个解决方案.http://www.codeproject.com/Articles/22824/A-Model-to-Represent-Directed-Acyclic-Graphs-DAG-o
但是当我使用这种方法时,它会有数百万的数据与该表.这是低效的.
我的问题是有任何有效的方法来做到这一点.我的表结构有什么问题阻止我有效地进行这种查询.
如果我使用Oracle connect by,则可以使用关键字来创建分层查询.目前我在一个项目上使用MySQL,我想知道connect by在MySQL中是否有替代品?
我试过google但到目前为止无济于事.我想要实现的是通过一个查询从数据库中获取树.涉及两个表:
areas和area_to_parent_join.后者包含两个ID area_id,另一个是parent_id.所以它基本上是一个自我连接,我可以使用该模型创建图形.事实上,它目前仅用于创建树木,但未来可能会发生变化.但在任何一种情况下,我想拥有的只是一棵生成树.
编辑: areas可能有超过1.000.000条记录,这使得大多数空间密集型选项变得不可行.
如果您的答案与Java/SQLite无关,我很乐意阅读它.
我使用以下方案将项目存储在数据库中:
###################
# Item #
###################
# _id # This is the primary key
# parent_id # If set, it the ID of the item containing this item
# date # An ordinary date
# geocontext_id # Foreign key to a pair of named coordinates
###################
###################
# Geocontext #
###################
# _id # This is the primary key
# name # Way for the user to label a pair of coordinates (e.g : "home", "work")
# x …Run Code Online (Sandbox Code Playgroud) 我正在为一个站点构建导航,对于我的生活,我无法弄清楚递归.我使用这种设计通过MySQL存储了所有数据:

我已经阅读了几个关于递归如何工作的链接,我一定很慢,因为我很难掌握.我试着写一些东西,我知道它甚至不是我真正需要的东西,但它是一个开始:
PDO
public function viewCategories()
{
$viewSQL = "SELECT * FROM categories";
try
{
$pdo = new PDO('mysql:host=localhost;dbname=store','root','');
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$categoryVIEW = $pdo->prepare($viewSQL);
$categoryVIEW->execute();
$array = $categoryVIEW->fetchAll(PDO::FETCH_ASSOC);
$categoryVIEW->closeCursor();
$json = json_encode($array);
return $json;
}
catch(PDOexception $e)
{
return $e->getMessage();
exit();
}
}
Run Code Online (Sandbox Code Playgroud)
递归
$return = json_decode($category->viewCategories(),true);
function buildNavigation($json)
{
foreach($json as $item)
{
if($item['category_id'] === $item['parent'])
{
print('<li>'.$item['category_name'].'</li>');
if($item['category_id'] === $item['parent'])
{
print('<li>match'.$item['category_name'].'</li>');
buildNavigation($json);
}
}
}
buildNavigation($return);
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,这将永远不会进入.我确实试图通过自己来解决这个问题,因为知道这是一件好事,但我想这超出了我的心理能力:(
谢谢你看看:)
UPDATE
我知道这已经得到了解答,但有没有办法可以做到这一点来构建一个关联数组?我一直在玩一个ALMOST为我工作的功能,我从这里获得,但它增加了一个我不想要的额外数组.
方法
private function buildCategories($array,$parent)
{
$result …Run Code Online (Sandbox Code Playgroud) 在查询数据库以查找嵌套在闭包表中的注释之后,比如Bill Karwin在这里建议什么是将平面表解析为树的最有效/优雅的方法?,我现在从SQL获得以下数据结构:
"comments": [
{
"id": "1",
"breadcrumbs": "1",
"body": "Bell pepper melon mung."
},
{
"id": "2",
"breadcrumbs": "1,2",
"body": "Pea sprouts green bean."
},
{
"id": "3",
"breadcrumbs": "1,3",
"body": "Komatsuna plantain spinach sorrel."
},
{
"id": "4",
"breadcrumbs": "1,2,4",
"body": "Rock melon grape parsnip."
},
{
"id": "5",
"breadcrumbs": "5",
"body": "Ricebean spring onion grape."
},
{
"id": "6",
"breadcrumbs": "5,6",
"body": "Chestnut kohlrabi parsnip daikon."
}
]
Run Code Online (Sandbox Code Playgroud)
使用PHP我想重构这个数据集,所以注释嵌套如下:
"comments": [
{
"id": "1",
"breadcrumbs": …Run Code Online (Sandbox Code Playgroud)