sql >> Databáze >  >> RDS >> Mysql

php / Mysql nejlepší stromová struktura

Můžete použít model vnořené sady protože poskytuje velmi efektivní dotazy. Podívejte se na Správa hierarchických dat v MySQL a přečtěte si část nazvanou Model vnořené sady .

Pokud používáte ORM jako Doctrine, je to obsahuje funkce vnořené sady .

Pro některé může být obtížné pochopit vnořené množiny konceptů vlevo a správně. Zjistil jsem, že použití těchto čísel jako analogie k číslům řádků značek otevřít/zavřít v dokumentu XML je pro lidi snazší.

Vezměte si například příklad dat z odkazu MySQL výše:

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

Pokud pojedete lft , rgt pole a použijte je jako čísla řádků pro dokument XML, získáte:

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>

Když to vidíte tímto způsobem, může to některým výrazně usnadnit vizualizaci výsledné hierarchie vnořených množin. Také je jasnější, proč tento přístup zvyšuje efektivitu, protože umožňuje vybrat celé uzly bez potřeby více dotazů nebo spojení.



  1. Časová pásma MySQL

  2. Jak vyřešit nejednoznačné názvy sloupců při načítání výsledků?

  3. Jak získat datum z řetězce v Oracle

  4. Uložená procedura nebo funkce očekává parametr, který není zadán