sql >> Database >  >> RDS >> Mysql

php / Mysql beste boomstructuur

Je kunt een Genest setmodel . gebruiken omdat het zeer efficiënte zoekopdrachten oplevert. Bekijk Hiërarchische gegevens beheren in MySQL en lees de sectie genaamd Genest setmodel .

Als je een ORM zoals Doctrine gebruikt, is het inclusief geneste set-mogelijkheden .

Het kan voor sommigen moeilijk zijn om de geneste setconcepten van links . te begrijpen en rechts. Ik heb gemerkt dat het gemakkelijker te begrijpen is om die getallen te gebruiken als analogie voor de regelnummers van open/close-tags in een XML-document.

Neem bijvoorbeeld het gegevensvoorbeeld van de MySQL-link hierboven:

+-------------+----------------------+-----+-----+
| 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 |
+-------------+----------------------+-----+-----+

Als u de lft . neemt , rgt velden en gebruik ze als regelnummers voor een XML-document, dan krijg je:

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>

Door het op deze manier te zien, kan het voor sommigen veel gemakkelijker zijn om de resulterende geneste sethiërarchie te visualiseren. Het maakt ook duidelijk waarom deze aanpak de efficiëntie verbetert, omdat het mogelijk maakt om hele nodes te selecteren zonder dat er meerdere query's of joins nodig zijn.



  1. ASCII()-functie in Oracle

  2. Soorten SQL-opdrachten

  3. Hoe u fouten bij het muteren van tabellen kunt voorkomen

  4. Is de OraOLEDB-provider in .NET onbetrouwbaar op CLOB-velden?