Sestavení stromu, kde children může mít více parentů rubrika: Programování: PHP

1 loneswan
položil/-a 24.9.2014

Zdravím,

mám nějakou databázi produktů (MySQL), kde každý produkt má id a jméno.

Potom má tabulku vztahů, kde je uložená posloupnost produktů, tak jak na sebe navazují.

Jedná se o podobnout strukturu (viz. obrázek): http://i.stack.imgur.com/GR9mz.png

Já podle id produktu potřebuji vypsat strukturu "odspoda" nějak takhle:

  • A
    -- B
    --- D
    ---- E
    ----- F
    ------ X
    ---- G
    ----- H
    ------ I
    ------- X
  • J
    -- K
    --- L
    ---- X
    ----- M
    ------ X

X je můj produktu a přes relations table je k němu se možné dostat mnoha cestami - pokusil jsem se naznačit obrázkem a schématem, které potřebuju vypsat.

Zatím zobrazuji jen vazby 1 level nahoru. Takže píšu jednoduše: X je M, X je I a X je F. Teď bych místo toho chtěl vypsat seznam "až nahoru".

Je jasné, že relační databáze a strom zrovna dohromady nepatří. Celý den se snažím najít řešení s ohledem na velikost db (150 000+ záznamů v relation).

Zatím mám vymyšleno, že vzledem k Nette které používám si pro každý produkt najdu cestu odshora dolů a strom si hodím do cache. To ale bude:

  • trvat dlouho
  • nevyužívat db - relations table najednou postrádá smysl?
  • sakra velká cache

Možná mi jen něco uniká a jde to udělat strašně jednoduše. Pokud jste někdy dělali něco podobného v PHP/MySQL, tak určitě ocením vaše tipy :-)

odkaz
2 petrbolf
odpověděl/-a 24.9.2014

Není to strom, strom má vždy jen jednoho rodiče. Je to orientovaný graf. Zkus pohledat něco na práci s orientovaným grafem.

Matematicky jde asi o úlohu, kdy vezmeš uzel (X) a procházíš všechny vstupujicí hrany od uzlu X nahoru až do uzlu (uzlů), které už žádné vstupní hrany nemají.

V relační databázi se s tím opravdu moc dobře nepracuje.

Komentáře

  • jiri.knesl : V relačních databázích se s tím pracovat dá dobře, když mají hierarchické queries 25.9.2014
  • petrbolf : Hierarchická queries jsem neznal, díky za dovzdělání :-) A dívám se, že to postgresql uměl už ve verzi 8.4. 26.9.2014

Pro zobrazení všech 5 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.