Autor | Zpráva | ||
---|---|---|---|
visionic Profil * |
Dobrý večer všem. Tentokrát nevím jak mám řešit problém s kategoriema ESHOPU (ten problém jsem vyřešil, ale předpokládám, že ho řeším špatně a s Vaší pomocí zvládnu to udělat správně.)
Situace: V mysql mám 5 tabulek (na to hledět nemusíte, vše přehodím, když to bude třeba) - 1. kategorie (id, nazev) -> zde je hlavní kategorie a jsoum k nim přiřazeny podkategorie - 2. kategorie2 (id, filtr, nazev) -> kategorie druhého stupně, filtr určuje, do které hlavní kategorie spadá - 3. kategorie3 (id, filtr, nazev) -> kategorie třetího, filtr určuje do které kategorie2 patří - 4. kategorie4 (id, filtr, nazev) -> atd. atd. - 5. produkt (id, filtr, nazev, cena, sklad) -> zde filtr určuje do které kategorie spadá Problém nastává u výpisu produktů při filtrování. Jakmile se nedoklikám do poslední kategorie, ale rozkliknu kategorii2, tak chci aby se mi vypsali všechny produkty, které jsou ke druhé kategorii přiřazeny, ale do produktu zapisuji pouze tu poslední možnou. Třeba: 1. id1 - PC 2. id3 - Stolní 3. id7 - Herní 4. id9 - Profi - Produkt 1 - Produkt 2 - Produkt 3 4. id10 - Základní - Produkt 4 - Produkt 5 - Produkt 6 3. id8 - Domácí - Produkt 7 - Produkt 8 - Produkt 9 2. id4 - Notebook - Produkt 10 - Produkt 11 - Produkt 12 1. id2 - Tablety 2. id5 - 10 palců 2. id6 - 9 palců Takže když kliknu na kategorii PC, zobrazí se všech 12 produktů. Když kliknu na kategorii STOLNÍ, zobrazí Produkt 1 - Produkt 9 Když kliknu na kategorii NOTEBOOK, zobrazí Produkt 10 - 12 Když kliknu na kategorii ZÁKLADNÍ, Produkt 4 - 6 Nevím jak nejlépe sestavit mysql a pak to zobrazovat. Nyní to řeším tak, že produkt má 4 filtry, do kterých udávám ty 4 kategorie. NAPŘ: FILTR: PC, FILTR2: STOLNÍ, FILTR3: HERNÍ, FILTR4: PROFI. Tudíž mi to funguje docela dobře, ale nepřipadá mi to jako ideální řešení. Nakopnete mě teda jak to logicky udělat? Nepotřebuju jsem psát kompletní kód, ale logické řešení, které snad pochopím a nebo popř. PHP FCI, kterou najdu v manuálu. Zas tak tupej nejsem. :D Děkuji za popř. pomoc. Číslo udává třídu kategorie. 1. - Hlavní, 2. - Pod kategorie, 3. - Podpod Kategorie, 4. - podpodpod Kategorie |
||
juriad Profil |
#2 · Zasláno: 16. 3. 2016, 20:27:28
Takto rozhodně ne. Snažíš se reprezentovat strom kategorií. K tomu existuje několik metod, viz www.slideshare.net/billkarwin/sql-antipatterns-strike-back/48-Naive_Trees_48Monday_April_20.
Kolik kategorií (všech úrovní dohromady) plánuješ mít? Budou jich tisíce? Pokud ano, vyplatí se něco sofistikovaného, jinak si to ulož do databáze jakkoli a při každém dotazu na strom kategorií si ho vytáhneš celý do PHP a tam zpracuješ. Jak často se ti budeou kategorie měnit? |
||
visionic Profil * |
Pouze 4 kategorie tim myslim urovne. Asi takhle:
Kategorie 1. Úroveň l_ Kategorie 2. Úroveň l_ Kategorie 3. Úroveň l_ Kategorie 4. Úroveň Kategorie 1. Úroveň Kategorie 1. Úroveň l_ Kategorie 2. Úroveň l_ Kategorie 3. Úroveň Kategorie 1. Úroveň Podle toho odkazu cos mi poslal, tak to dělám, akorát nemám jeden sloupec, ale čtyři u toho produktu. Což bych zase udělal prasárnu, že bych ten jeden sloupec explodnul, ale pak při editaci produktu zase implodnul. |
||
Kcko Profil |
#4 · Zasláno: 16. 3. 2016, 21:01:17
visionic:
Velmi zjednodušeně sandbox.rjwebdesign.cz/dbmenu/pg.php sandbox.rjwebdesign.cz/dbmenu/source.phps |
||
visionic Profil * |
#5 · Zasláno: 16. 3. 2016, 21:19:44
Velmi zjednodušěně, ale pro člověka, který s tímhle pracuje prvně, dost složité, pač musím na čítat návod v manuálu a jak jednotlivé řádky/scripty fungují. Nejde mi o to kopčit script a upravovat a zkoušet co to dělá, ale pochopit funkčnost, proč se to tak dělá a pak testovat a pochopit zbytek. Takže to znamená přeci, čeká mě dost učení :D.
|
||
Kcko Profil |
#6 · Zasláno: 16. 3. 2016, 21:26:01
visionic:
Je tam jen základní syntaxe, možná jednodušší bež třídy, jen několik krátkých funkcí ... sandbox.rjwebdesign.cz/dbmenu/simple-tree-my-menu.phps |
||
visionic Profil * |
Docela vse chapu, parrent urcuje v jakem id se polozky zobrazi, k tomu jsem taky dosel (sice moji hapatlalštinou, ale dostal). Ale už nevím jak k nim vypíšu ty produkty. Já ty produkty mám až ve čtvrté složce., ale chci je zobrazit už po kliku na druhou složku. Protože jsou součástí té druhé složky, složka 3 a složka 4, chci je obě vypsat už po kliku na druhou. Takže spíše nejde o strom, ale o filtraci.
kliknu na PC zobrazí všechny položky co jsou PC kliknu na domácí vyloučí všechny notebooky a herní pc kliknu na 4 jádra procesoru vyloučí všechny dvou jádra a osmi jádra. Jde tedy o trochu jinou situaci. Proste me nic jineho nenapada, nez produktu určit (klidně v jednom sloupci) idčka kategorii 1/4/8/9 a pak je to jasné, strom kategorií již mám hotový. Stačí mi ty produkty. |
||
Kcko Profil |
#8 · Zasláno: 16. 3. 2016, 22:02:36
visionic:
Jde v první řadě o strom kategorií s vazbou rodič = dítě. A co se týká dalšího dotazu, řeší se to tak, že se bud produkty nastrkají do kategorií do kterých potřebuješ, tj. do rodiče i do dítěte, resp do všech úrovní NEBO se strkají jenom do nejnižších úrovní a ty vyšší úrovně vybírají produkty z nižších. Třeba tady www.ahel.cz/eshop/688-jablotron-ezs se vybírají produkty z podřízených kategorií, v této kategorie 688 vlastně žádný produkt ani není. Stačí vědět jaké kategorie jsou pod tou kterou sis rozklikl a udělat dotaz na to, které produkty se v kategoriích nacházejí. |
||
Keeehi Profil |
#9 · Zasláno: 16. 3. 2016, 22:26:15
Vím že Kajman v případě stromů radí buď přejít na databázi která umožňuje práci s hierarchickými daty (měl by to snad umět PostgreSQL) nebo Traverzování kolem stromu prakticky
|
||
Časová prodleva: 7 let
|
0