Autor | Zpráva | ||
---|---|---|---|
Pavol Tomančák Profil * |
#1 · Zasláno: 24. 10. 2013, 11:00:28
Dobrý deň,
snažím sa vyriešiť tento problém čo najlepšie, ale zatiaľ si neviem rady. Chcel by som vytvoriť filter produktov podobný tomu, aký používa ALza.sk. Čiže ak je zákazník v určitej kategorii, tak script prejde produkty a vygeneruje filter. Podľa parametrov Mám tabuľku produktov (products), ID a názov produktu, id, product_name 1, pracka 2, zehlicka 3, mixer 4, vana a tabuľku možných parametrov (products_parameters), ID a názov parametra: id, parameter_name 1, farba 2, objem 3, vyska 4, sirka 5, vaha pre kazdy parameter mám ďalšiu tabuľku, napr pre farbu (param_farba) id, parameter_hodnota 1, modrá 2, zelená 3, červená param_objem id, param_hodnota 1, 0.5L 2, 0.75L 3, 1L 4, 1.5L atď. no a v poslednej tabuľke mám priradené produkty k parametromv (products_priradenie) id, product_id, param_id, param_hodnota 1, 1, 3 // produkt práčka (id 1), má parameter farbu (id 1), ktorého hodnota je červená (id 3) 4, 2, 4 // produkt vaňa (id 4), má parameter objem (id 2), ktorého hodnota je 1.5L (id 4) 4, 1, 1 // produkt vaňa (id 4), má parameter farbu (id 1), ktorého hodnota je modrá (id 1) Neviem si poradiť s takým dotazom, ktorý by mi "vygeneroval" filter. Ten by mal vypadať nasledovne: (v zátvorke je počet produktov) Farba modra (3) zelena (19) Objem 1L (12) 1.5L (10) Výška 1m (1) 1.5m (5) podľa produktov, ktoré sa nachádzaju v danej kategórii. Môj postup je nasledovný. Najskor si zozbieram všetky ID produktu v kategoríí, v ktorej sa náchádza zákazník. SELECT id FROM products {$where} -- nejaka podmienka, napr id kategorie IDcka si spojim čiarkou a ulozim do premennej $all_products_id, napr. 1,4,6,7,8,10,15 Takto nájdem dostupné parametre: SELECT products_parameters.id,products_parameters.name FROM products_parameters,products_priradenie WHERE products_priradenie.product_id IN ({$all_products_id}) GROUP BY products_parameters.name a potom ešte pre každý parameter získam hodnotu a počet produktov: čiže vylistujem parametre: while ($main_filters = mysql_fetch_array($generate_main_filters)) { echo $main_filters['name']."<br />"; } a vo while ešte zistím hodnoty parametrov, ale tu sa dostávam do problému, že neviem ako. Vedeli by ste mi prosím pomôcť? Je tento postup správny? |
||
Kajman Profil |
#2 · Zasláno: 24. 10. 2013, 13:03:18
Nedělejte pro hodnoty pro různé parametry různé tabulky. Dejte to do jedné, ušetříte si práci.
Tedy např. param_hodnoty hodnota_id (AI), param_id, hodnota_nazev, hodnota_poradi 1, 1, modrá, 1 2, 1, zelená, 2 3, 1, červená, 3 4, 2, 0.5L, 1 5, 2, 0.75L, 2 6, 2, 1L, 3 7, 2, 1.5L, 4 A stačí to pro tu kategorii, nebo se má filtr postupně omezovat tím, jak se něco zvolí? Pokud bude filtr fixní, stačí použít vhodně join, něco jako ... SELECT h.param_id, h.id, r.parameter_name, h.hodnota_nazev, Count(DISTINCT p.id) pocet FROM products p JOIN products_priradenie v ON p.id = v.product_id JOIN param_hodnoty h ON v.param_hodnota = h.id AND v.parameter_id = h.param_id JOIN products_parameters r ON v.parameter_id = r.id WHERE p.kategorie = 42 # nebo jiná omezují podmínka GROUP BY h.param_id, h.id ORDER BY r.parameter_name, h.hodnota_poradi, h.hodnota_nazev |
||
Pavol Tomančák Profil * |
#3 · Zasláno: 25. 10. 2013, 19:57:08
Ďakujem Vám, skúsim si to a napíšem výsledok. Vďaka
|
||
Časová prodleva: 10 let
|
0