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

php/Mysql migliore struttura ad albero

Puoi utilizzare un Modello di set nidificato poiché produce query molto efficienti. Dai un'occhiata a Gestione dei dati gerarchici in MySQL e leggi la sezione chiamata Modello di set nidificato .

Se stai usando un ORM come Doctrine, include funzionalità di set nidificati .

Può essere difficile per alcuni afferrare i concetti degli insiemi nidificati di sinistra e destra. Ho scoperto che usando quei numeri come analogia per i numeri di riga dei tag di apertura/chiusura in un documento XML, la gente lo trova più facile da capire.

Ad esempio, prendi l'esempio di dati dal link MySQL sopra:

+-------------+----------------------+-----+-----+
| category_id | name                 | lft | rgt |
+-------------+----------------------+-----+-----+
|           1 | ELECTRONICS          |   1 |  20 |
|           2 | TELEVISIONS          |   2 |   9 |
|           3 | TUBE                 |   3 |   4 |
|           4 | LCD                  |   5 |   6 |
|           5 | PLASMA               |   7 |   8 |
|           6 | PORTABLE ELECTRONICS |  10 |  19 |
|           7 | MP3 PLAYERS          |  11 |  14 |
|           8 | FLASH                |  12 |  13 |
|           9 | CD PLAYERS           |  15 |  16 |
|          10 | 2 WAY RADIOS         |  17 |  18 |
+-------------+----------------------+-----+-----+

Se prendi il lft , rgt campi e usarli come numeri di riga per un documento XML, ottieni:

1. <electronics>
2.    <televisions>
3.        <tube>
4.        </tube>
5.        <lcd>
6.        </lcd>
7.        <plasma>  
8.        </plasma> 
9.     </televisions>
10.    <portable electronics>
11.        <mp3 players>
12.            <flash>
13.            </flash>
14.        </mp3 players>
15.        <cd players>
16.        </cd players>
17.        <2 way radios>
18.        </2 way radios>
19.    </portable electronics>
20. </electronics>

Vederlo in questo modo può rendere molto più facile per alcuni visualizzare la gerarchia degli insiemi nidificati risultante. Rende inoltre più chiaro il motivo per cui questo approccio migliora l'efficienza poiché consente di selezionare interi nodi senza la necessità di più query o join.