zdar, mám tabulku
ID | PARENT | NAZEV | ...
a ted si zobrazím kategorii s ID x, která má pod sebou kategorie, važící se na ní nastavením parent .
Jak se dá efektivně přímo přes MySQL zjistit, jaká všechna ID pod ní jsou?
Já bych to řešil hrozně složitě a je mi jasné, že to půjde udělat rychleji a lépe. Předem děkuji za každou radu.
Fórum › MySQL
Zjištění všech ID v podkategoriích
Jestli jsem to pochopil, tak by melo jit tohle:
SELECT * FROM table WHERE parent=vybrane_ID
Tohle ti vybere vsechny zaznamy, ktere patri do nejake kategorie s vybranym ID.
ja som toto tiez riesil... ale som sa nakoniec nedopracoval k zmysluplnemu dotazu... predpokladam ze tam mas viac subkategorii.. teda viacurovnove.. skusal si uz aj nieco??
Přesně. Zřejmě to z dotazu nevyplynulo, ale těch podkategorií je samořejmě více než 1. Prozatimní řešení mám udělané přes pole. Vytáhnu si z datababáze ID všech podkategorií a potom s ním dále pracuju. Ale je to krapet neefektivní řešení - minimálně mi to tak přijde, proto se ptám tady.
asi mame rovnake myslienkove pochody... ja to mam zatial tak ze v kazdej nadradenej kategorii mam stlpec s IDeckami podkategorii (teda nieco taketo: 4-8-12-15-16) a pomocou explode to rozsekam a vyrobim dotaz v zmysle ID=dotazovane_id OR ID=4 OR ID=8 OR..... len to je riesenie za 5 korun :(
Sakalik
O správě hierarchických dat v MySQL je hezky povězeno v tomto článku[1], česky zase něco na intervalu[2]. Bohužel asi nepomohou vyřešit tenhle problém. Při použití tohoto modelu (tj. odkazování se na rodiče) se celý strom získává jen těžko – viz první článek. Pokud víš hloubku podstromu, můžeš sestavit dotaz pomocí spojovaní tabulky se samou sebou (self-join), jinak to nepůjde jinak, než použít rekruzi, či zásobník (viz druhý článek). Možnosti řešení jsou tedy:
1) Ukládat si ke každému uzlu jeho hloubku a někam mimo si uložit hloubku celého stromu (na to můžeš dobře posloužit i soubor) a vytvářet dotazy pomocí self-joinů.
2) Holt použít tu rekurzi, zásobník a hezky si zadotazovat.
3) Přejít na model traverzování kolem stromu, protože tam je to jednoduché:
SELECT [lft], [rgt] FROM [kategorie] WHERE [id] = $id
SELECT [id] FROM [kategorie] WHERE [lft] > $lft AND [rgt] < $rgt -- $lft, $rgt --> z předchozího dotazu
[1] http://dev.mysql.com/tech-resources/articles/hierarchical-data.html
[2] http://interval.cz/clanky/metody-ukladani-stromovych-dat-v-relacnich-databazich/
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
C# zjištění pozice všech objektů — založil simi
Výpis všech souborů — založil tonez
Spustitelný program na všech pc — založil kukla
Lode - kontrola vsech lodi — založil Vavat9
Moderátoři diskuze