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
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
visionic:
Velmi zjednodušeně

sandbox.rjwebdesign.cz/dbmenu/pg.php
sandbox.rjwebdesign.cz/dbmenu/source.phps
visionic
Profil *
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
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
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
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

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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