Autor Zpráva
Pavol Tomančák
Profil *
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
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 *
Ďakujem Vám, skúsim si to a napíšem výsledok. Vďaka

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: