使用嵌套集模型在sqlite中存储层次结构数据如何将一个类别移动到另一个类别

用户名

我正在尝试使用SQLite存储分层数据。经过大量搜索之后,我选择使用嵌套集合模型而不是邻接表,因为几乎90%的操作将被读取,而只有10%的操作将被更新/删除/创建。

我遵循以下示例:http : //www.phpro.org/tutorials/Managing-Hierarchical-Data-with-PHP-and-MySQL.html

它可以很好地添加,删除和读取新节点。

但是我没有找到任何文章解释如何更新树,例如将一个类别移动到另一个类别。

下面是我的数据库结构:

id   name   left_node   right_node
1    name1     1          2

**我没有找到解释如何更新层次结构的地方,这是我真正需要的。**

另一个问题是

public function delete_node($pleft, $pright){

$width = $pright-$pleft+1;

$delete_sql = "delete from categories where left_node between $pleft and $pright";
$update_sql1 = "update categories set right_node = right_node-$width where right_node > $pright";
$update_sql2 = "update categories set left_node = left_node-$width where left_node> $pright";
//
$this->db->trans_start();
//
$this->db->query($delete_sql);

//
$this->db->query($update_sql1);
$this->db->query($update_sql2);
$this->db->trans_complete();
//
return $this->db->trans_status();
}

这是我的删除方法,需要30毫秒才能完成。那是正常的吗?

我解决了问题,感谢您的帮助http://www.ninthavenue.com.au/how-to-move-a-node-in-nested-sets-with-sql

我在sqlite数据库中使用codeigniter。下面是我的功能,

public function move_node($pleft, $pright, $origin_left_pos, $origin_right_pos){

//
//the new_left_position is different according to which way you want to move the node 
$new_left_position = $pleft + 1;
//
$width = $origin_right_pos - $origin_left_pos + 1;
$temp_left_position = $origin_left_pos;

$distance = $new_left_position - $origin_left_pos;
//backwards movement must account for new space
if($distance < 0){

  $distance -= $width;
  $temp_left_position += $width;

}
//
$update_sql1 = "update categories set left_node = left_node+$width where left_node >=  $new_left_position";

$update_sql2 = "update categories set right_node = right_node+$width where right_node >= $new_left_position";

//
$update_sql3 = "update categories set left_node = left_node+$distance , right_node = right_node+$distance where left_node >= $temp_left_position AND right_node < $temp_left_position+$width";

//
$update_sql4 = "update categories set left_node = left_node-$width where left_node > $origin_right_pos";
$update_sql5 = "update categories set right_node = right_node-$width where right_node > $origin_right_pos";

//

$this->db->trans_start();

$this->db->query($update_sql1);

//
$this->db->query($update_sql2);
$this->db->query($update_sql3);
$this->db->query($update_sql4);
$this->db->query($update_sql5);
$this->db->trans_complete();

return $this->db->trans_status();
}
蒂亚戈·杜阿尔特

SO中有几个关于您的问题的答案:

在嵌套集中移动节点

在嵌套集树中移动节点

大约需要30毫秒的删除时间才能运行该操作,因此无需担心。不要陷入过早优化的陷阱:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将一个类别的对象分组为另一个类别中的对象数组?

来自分类Dev

如何将数据移动到memsql中的另一个文件夹

来自分类Dev

如何将数据库移动到mongodb中的另一个分片

来自分类Dev

如何将 foreach 循环数据存储到另一个模型中?

来自分类Dev

如何将变量的值移动到汇编中的另一个变量

来自分类Dev

如何将活动窗口移动到XFCE中的另一个显示

来自分类Dev

AppleScript:如何将邮箱移动到Apple Mail中的另一个邮箱

来自分类Dev

如何将 mainactivity 中的整数计算移动到另一个活动 textview?

来自分类Dev

将数据移动到另一个表

来自分类Dev

如何将数据从一个数据库(主serevr(sql))移动到android数据库(本地(sqlite))中的另一个数据库

来自分类Dev

如何将一堆git存储库从一个远程存储库移动到另一个?

来自分类Dev

如何将一个模型的数据合并到另一个模型中?

来自分类Dev

如何将值从一个列表移动到另一个列表,同时将其从第一个列表中删除

来自分类Dev

如何将数据从一个结构链接到另一个

来自分类Dev

Github:如何将一个存储库移动到另一个存储库以保留我的提交历史?

来自分类Dev

如何将一个gameObject从他的位置统一移动到另一个对象位置?

来自分类Dev

如何将SQL Server数据库移动到另一个数据库?

来自分类Dev

Ruby on Rails:如何将对象从一个类别复制到另一个类别

来自分类Dev

如何将 R 中的 df 与类别值与另一个 df 及其相应值合并?

来自分类Dev

git:将隐藏项移动到另一个目录中的存储库

来自分类Dev

如何将文件从一个目录移动到另一个目录?

来自分类Dev

如何将容器从一个节点移动到另一个节点?

来自分类Dev

如何将svg节点从一个组移动到另一个组?

来自分类Dev

如何将代码更改从一个分支移动到另一个分支

来自分类Dev

如何将项目从一个checkedListBox移动到另一个checkedListBox

来自分类Dev

卷管理:如何将空间从一个分区移动到另一个分区?

来自分类Dev

如何将(未推动)提交从一个分支移动到另一个分支

来自分类Dev

如何将某些修订版从一个分支移动到另一个分支?

来自分类Dev

如何将 N 行从一个文件移动到另一个文件

Related 相关文章

  1. 1

    如何将一个类别的对象分组为另一个类别中的对象数组?

  2. 2

    如何将数据移动到memsql中的另一个文件夹

  3. 3

    如何将数据库移动到mongodb中的另一个分片

  4. 4

    如何将 foreach 循环数据存储到另一个模型中?

  5. 5

    如何将变量的值移动到汇编中的另一个变量

  6. 6

    如何将活动窗口移动到XFCE中的另一个显示

  7. 7

    AppleScript:如何将邮箱移动到Apple Mail中的另一个邮箱

  8. 8

    如何将 mainactivity 中的整数计算移动到另一个活动 textview?

  9. 9

    将数据移动到另一个表

  10. 10

    如何将数据从一个数据库(主serevr(sql))移动到android数据库(本地(sqlite))中的另一个数据库

  11. 11

    如何将一堆git存储库从一个远程存储库移动到另一个?

  12. 12

    如何将一个模型的数据合并到另一个模型中?

  13. 13

    如何将值从一个列表移动到另一个列表,同时将其从第一个列表中删除

  14. 14

    如何将数据从一个结构链接到另一个

  15. 15

    Github:如何将一个存储库移动到另一个存储库以保留我的提交历史?

  16. 16

    如何将一个gameObject从他的位置统一移动到另一个对象位置?

  17. 17

    如何将SQL Server数据库移动到另一个数据库?

  18. 18

    Ruby on Rails:如何将对象从一个类别复制到另一个类别

  19. 19

    如何将 R 中的 df 与类别值与另一个 df 及其相应值合并?

  20. 20

    git:将隐藏项移动到另一个目录中的存储库

  21. 21

    如何将文件从一个目录移动到另一个目录?

  22. 22

    如何将容器从一个节点移动到另一个节点?

  23. 23

    如何将svg节点从一个组移动到另一个组?

  24. 24

    如何将代码更改从一个分支移动到另一个分支

  25. 25

    如何将项目从一个checkedListBox移动到另一个checkedListBox

  26. 26

    卷管理:如何将空间从一个分区移动到另一个分区?

  27. 27

    如何将(未推动)提交从一个分支移动到另一个分支

  28. 28

    如何将某些修订版从一个分支移动到另一个分支?

  29. 29

    如何将 N 行从一个文件移动到另一个文件

热门标签

归档