Mysql
 sql >> Database >  >> RDS >> Mysql

Come generare una vista ad albero da questo set di risultati basato sull'algoritmo di attraversamento dell'albero?

Quando costruisci il modello di albero nidificato, non creare mai duplicati su lft e rgt . In effetti, dovresti dichiararli unici.

Nel tuo modello di dati, i set per la categoria 1 e 8 sovrapposizione. Dì, 1 a 14 sono usati entrambi per gli articoli 1 e 8 .

Sostituiscili con questi valori:

INSERT INTO `categories` VALUES(1, NULL, NULL, 'Fruits', 1, 14);
INSERT INTO `categories` VALUES(2, 1, 1, 'Apple', 2, 3);
INSERT INTO `categories` VALUES(3, 1, 1, 'Orange', 4, 9);
INSERT INTO `categories` VALUES(4, 3, 1, 'Orange Type 1', 5, 6);
INSERT INTO `categories` VALUES(5, 3, 1, 'Orange Type 2', 7, 8);
INSERT INTO `categories` VALUES(6, 1, 1, 'Pear', 10, 11);
INSERT INTO `categories` VALUES(7, 1, 1, 'Banana', 12, 13);
INSERT INTO `categories` VALUES(8, NULL, NULL, 'Eletronics', 15, 29);
INSERT INTO `categories` VALUES(9, 8, 8, 'Cell Phones', 16, 17);
INSERT INTO `categories` VALUES(10, 8, 8, 'Computers', 19, 24);
INSERT INTO `categories` VALUES(11, 10, 8, 'PC', 20, 21);
INSERT INTO `categories` VALUES(12, 10, 8, 'MAC', 22, 23);
INSERT INTO `categories` VALUES(13, 8, 8, 'Printers', 25, 26);
INSERT INTO `categories` VALUES(14, 8, 8, 'Cameras', 27, 28);

Ora non devi ordinare su root_id .

Non è un modo semplice, a meno che non si inseriscano i nodi nell'ordine dei nomi dall'inizio. Fratelli con il name maggiore dovrebbe avere un lft maggiore e rgt :

INSERT INTO `categories` VALUES(1, NULL, NULL, 'Fruits', 1, 14);
INSERT INTO `categories` VALUES(2, 1, 1, 'Apple', 2, 3);
INSERT INTO `categories` VALUES(7, 1, 1, 'Banana', 4, 5);
INSERT INTO `categories` VALUES(3, 1, 1, 'Orange', 6, 11);
INSERT INTO `categories` VALUES(4, 3, 1, 'Orange Type 1', 7, 8);
INSERT INTO `categories` VALUES(5, 3, 1, 'Orange Type 2', 9, 10);
INSERT INTO `categories` VALUES(6, 1, 1, 'Pear', 12, 13);

Un albero nidificato può avere un solo ordine implicito.

C'è anche un modo per interrogare l'elenco di adiacenze in MySQL :

, tuttavia, dovrai creare una colonna di ordinazione univoca aggiuntiva se desideri ordinare su qualsiasi cosa diversa da id .

Potresti anche voler leggere questo articolo:

che mostra come archiviare e interrogare i set nidificati in modo più efficiente.