2

私は Github の JsTree 安定バージョンを使用しており、ディスカッション、ファイル、タグ付けする連絡先など、各カテゴリのテーブルにデータを保持するのに十分動的になるようにロジックを追加しようとしています。タグ付けシステム。

私の質問は基本的に、次のDB設計が「コピー」操作の実行を妨げている可能性があるかどうかです:

          `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 に一致するレコードの最小値と最大値を取得します。このようにして、操作との相互作用ごとに、「左」と「右」の最初の 2 つのレコード値を更新しています。他のすべての操作が機能するのに、コピー/貼り付けが機能しない理由を誰かが理解するのを手伝ってくれませんか? ありがとう。

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 に答える