2

我正在使用来自 Github 的 JsTree 稳定版本,我正在尝试添加逻辑以使其足够动态,以将每个类别的数据保存在表中,无论是讨论、文件还是要标记的联系人,所以基本上是标记系统。

我的问题基本上是,如果以下数据库设计可以阻止执行“复制”操作:

          `id` int(11) NOT NULL AUTO_INCREMENT,
          `parent_id` int(11) NOT NULL DEFAULT '0',
          `user_id` int(11) NOT NULL DEFAULT '0',
          `label` varchar(16) DEFAULT NULL,
          `position` bigint(20) unsigned NOT NULL DEFAULT '0',
          `left` bigint(20) unsigned NOT NULL DEFAULT '0',
          `right` bigint(20) unsigned NOT NULL DEFAULT '0',
          `level` bigint(20) unsigned NOT NULL DEFAULT '0',
          `type` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
          `h_label` varchar(16) NOT NULL DEFAULT '',
          `fulllabel` varchar(255) DEFAULT NULL,
          UNIQUE KEY `uidx_3` (`id`),
          KEY `idx_1` (`user_id`),
          KEY `idx_2` (`parent_id`)
        ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;

原来的样子是这样的:

        CREATE TABLE IF NOT EXISTS `tree` (
          `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
          `parent_id` bigint(20) unsigned NOT NULL,
          `position` bigint(20) unsigned NOT NULL,
          `left` bigint(20) unsigned NOT NULL,
          `right` bigint(20) unsigned NOT NULL,
          `level` bigint(20) unsigned NOT NULL,
          `title` text CHARACTER SET utf8 COLLATE utf8_unicode_ci,
          `type` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
          PRIMARY KEY (`id`)
        ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=13 ;

        INSERT INTO `tree` (`id`, `parent_id`, `position`, `left`, `right`, `level`, `title`, `type`) VALUES
        (1, 0, 2, 1, 14, 0, 'ROOT', ''),
        (2, 1, 0, 2, 11, 1, 'C:', 'drive'),
        (3, 2, 0, 3, 6, 2, '_demo', 'folder'),
        (4, 3, 0, 4, 5, 3, 'index.html', 'default'),
        (5, 2, 1, 7, 10, 2, '_docs', 'folder'),
        (6, 1, 1, 12, 13, 1, 'D:', 'drive'),
        (12, 5, 0, 8, 9, 3, 'zmei.html', 'default');

我们正在使用 JSON 将数据传回服务器,我在其中添加了一些小逻辑来获取与 user_id 匹配的记录的最小值和最大值。这样,我将在每次与操作交互时更新“左”和“右”的前两个记录值。有人可以帮我理解为什么如果其他所有操作都有效,复制/粘贴不起作用吗?谢谢。

4

1 回答 1

2

它最终在之前删除的源代码中,我的意思是修复在许多地方仅呈现基于当前登录到系统的用户的记录,但只有这些行应该归功于图像中的 Ivan Bozhanov下面提供了违规行。希望它可以帮助任何被困在同一地点的人。我们正在使用与嵌套集的记录匹配的 user_id 引用另一个表

            if($is_copy) {
                        $sql[] = "" . 
                            "INSERT INTO `".$this->table."` (" . 
                                "`".$this->fields["parent_id"]."`, " . 
                                "`".$this->fields["position"]."`, " . 
                                "`".$this->fields["left"]."`, " . 
                                "`".$this->fields["right"]."`, " . 
                                "`".$this->fields["level"]."` ," . 
                                                        "`user_id`," . 
                                                        "`label`" . 
                            ") " . 
                                "SELECT " . 
                                    "".$ref_id.", " . 
                                    "`".$this->fields["position"]."`, " . 
                                    "`".$this->fields["left"]."` - (".($idif + ($node[$this->fields["left"]] >= $ref_ind ? $ndif : 0))."), " . 
                                    "`".$this->fields["right"]."` - (".($idif + ($node[$this->fields["left"]] >= $ref_ind ? $ndif : 0))."), " . 
                                    "`".$this->fields["level"]."` - (".$ldif."), `user_id`,`label` " . 
                                "FROM `".$this->table."` " . 
                                "WHERE " . 
                                    "`user_id`= ".$uid." AND `".$this->fields["id"]."` IN (".implode(",", $node_ids).") " . 
                                "ORDER BY `".$this->fields["level"]."` ASC";
                    }
于 2012-06-26T12:29:09.690 回答