Autor | Zpráva | ||
---|---|---|---|
mitr Profil |
#1 · Zasláno: 22. 3. 2006, 10:08:48 · Upravil/a: mitr
Přemýšlel jsem jak udělat takovou ideální sktukturu kategorií shopu.
Zatím jsem vymeslel toto: id - unikátní id autoincrement id_nadraz - id nadřazené kategorie level - 0 hlavní kategorie, 1 podřazená .. atd pořadí - pořadí v aktuální nadřazené kategorii level - aby bylo možné vybrat všechny výrobky které jsou v kategoriích s větším level a podřazeny pod nějakou kategorií. Ale stejně to pořád není ještě ono, když budu chtít vybrat např všechno zboží pod nějakou kategorií a v všech podkategoriích tak to nebude s tímto tak jednoduché. |
||
Kajman_ Profil * |
#2 · Zasláno: 22. 3. 2006, 12:08:38
Problém bude získat seznam všech podkategorií k jedné, což jedním dotazem asi nepůjde (leda si naprogramovat nějakou funkci přímo v sql).
Takže, dokud by rostl počet kategorií v průběžném výsledku dotazu, hledal bych něco takového select id from kategorie where id in ($prubezny_seznam) or id_nadraz in ($prubezny_seznam) Tady takových dotazů by bylo víc, záleží na tom, jak moc to bude zanořené. Prostě se skončí, až ten seznam bude mít stejný počet položek jako minulý. Pak už se jen vypíš seznam zboží select * from zbozi where kategorie in ($prubezny_seznam) Možná je lepší řešení. |
||
mila Profil |
#3 · Zasláno: 22. 3. 2006, 12:48:05
Tomuto se říká tranzitivní uzávěr.
- Položka zná svého rodiče a ty potřebuješ vybrat všechny potomky nebo předky. Mysql ho neumí, takže potřebuješ prakticky provést dotaz pro každou položku, což může být neúnosné. Například Oracle ho ale umí (jak jsem ale slyšel, tak je to stejně pomalé). Řeěení existuje několik: - Smířít se s mnoha dotazy. - Generovat si pomocnou tabulku. - Nastavit maximální úroveň zanoření. - Dát jim id ve ve tvaru cislohlavni.cislopodkategorie.cislopodpodkategorie.... Bude textové a vybýrat to budeš pomocí like (je třeba malá čísla doplnit nulami). Pravda není to také dvakrát rychlé, ale vcelku elegantní. - Pěkné řešení jsem vyděl na intervalu. Využívá algoritmus pro průchod grafem do hloubky. http://interval.cz/clanky/metody-ukladani-stromovych-dat-v-relacnich-d atabazich/ |
||
mitr Profil |
#4 · Zasláno: 22. 3. 2006, 16:36:20
Díky Vám oběma za odpověď.
mila PostgreSQL "tranzitivní uzávěr" neumí ? Nikdy jsem ten pojem neslyšel, jdu si ale přečíst ten článek na Intervalu, díky za odkaz ;-) O nějakém řešení 0100, 0101 atd samozřejmě s více místy jsem také přemýšlel, ale nepřipadá mi to moc "čisté" ale asi to fakt bude to nejrychlejší. |
||
mitr Profil |
#5 · Zasláno: 22. 3. 2006, 20:35:58
Tak jsem si to přečetl i s diskusí pod článkem a nic z toho mi nepřipadalo jako ideální.
Vyberu si možná některou zmetod pro udržování přehledu v DB, ale menu se nebude měnit tak často, možná že si vygeneruju do souboru menu a ke každé položce i id všech jeho podpoložek, tak by z toho byl jen jeden dotaz a samozřejmě při každém přidávání kategorií se vše předělá, ale jak jsem říkal nebu se moc často něco přidávat / upravovat, jestli se to udělá 2x do týdne tak to je moc :) |
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0