Autor Zpráva
petrheller
Profil
Ahoj, potřeboval bych vyřešit spíše algoritmicky problem. Mam dve tabulky, jedna pro produkty, jedna pro kategorie. Kategorie se mohou pod sebe zanořovat (vytvaří se klasický strom, tabulce dva sloupec, id, parent_id). Kazdy produkt muze byt zarazen ve vice kategoriich. Ja chci na zacatku skriptu spustit algoritmus, ktery me vrati pole kde klicem bude id kategorie a hodnotou pocet produktu v celem jejim podstromu. Priklad jsem zapsal maticema:


kategorie (kat. 3 je zarazena pod 2):

  1 2 3
1 0 0 0
2 0 0 0
3 0 1 0

články (článek 1 je v kategorii 3, článek 2 a 3 je v kategorii 2, clanek 3 v kategorii 1)

  1 2 3
1 0 0 1
2 0 1 0
3 0 1 0
4 1 0 0

výsledná matice (prvni sloupec cislo kategorie, druhy sloupec počet článků v celem jejim podstromu):

1 1 (clanek č. 1)
2 3 (clanek č. 2,3,1)
3 1 (clanek č. 4)

samozrejme jeste lepsi by bylo, kdyby vznikla vylsedna matice takovato: (radky jsou kategorie a sloupce jsou zda se clanek nahcazi nekde v podstromu kateogire), soucet uz by se provedl jednoduse po radcich sectenim jednicek...
  1 2 3 4
1 1 0 0 0
2 0 1 1 1
3 0 0 0 1

Muze nekdo poradit efektivni algoritmus? Za rychle a dobre vyreseni mate lahev dle vyberu ;)

(prosim neradte at to delam rekurzi, to jsem zkousel a pri stovkach kategorii a tisisch produktech je vypocet dost pomaly... )
Alphard
Profil
petrheller:
prosim neradte at to delam rekurzi, to jsem zkousel a pri stovkach kategorii a tisisch produktech je vypocet dost pomaly
id-parent_id ačkoliv z pohledu normované databáze asi ideální, je pro praktickou práci velmi hloupý. Změňte strukturu. Třeba na traverzování kolem stromu. Closure table by z pohledu zjištění počtu byla lepší.

www.slideshare.net/billkarwin/sql-antipatterns-strike-back

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: