Zlozitejsie vyhladavanie v MySQL tabulke
- tolljump
- Člen | 47
Zdravim vas.
Urcite sa niekto stretol s tym, ze v e-shope treba funkcionalitu na zadavanie parametrov produktov. Ja som to zatial poriesil nasledovne:
Mam produkt a jednu tabulku kde je info o nom. K tomu dalsie tabulky
s dalsimi udajmi. Medzi nimi je jedna, do ktorej zapisujem parametre produktu.
Cize napr. nazvy stlpcov su v nej momentalne id, product_id, velkost, vyska,
sirka, …
Jeden zaznam v tejto tabulke zapisuje udaje pre vsetky tieto hodnoty. To by
nebol problem vyfiltrovat jednoduchym selektom, ak by kazdy udaj bol len
jednoduche cislo, alebo string. Lenze co v pripade, ak uzivatel zadava do
kolonky velkost udaje: L,XL,XXL
Tato forma zapisu by bola vzdy dodrzana. Len ako vytvorit select, aby mi hladalo v tabulke zaznamy, kde sa vyskytuje napr. XL, bez toho aby sa bralo do uvahy aj XXL co v pripade LIKE %XL% bude true.
Je na to nejaky MySQL dotaz, ktorym vyberiem len XL, ktore moze byt ohranicene ciarkou, prazdnym znakom, alebo zaciatkom retazca?
- Nox
- Člen | 378
Šlo by to třeba přes regulár např. \bXL\b, není to moc čisté, ale je jednoduché.
Další jednoduchou a ne úplně elegantní možnost je mít místo sloupečku velikost boolean sloupce velikostX, velikostXL… no ale pak bude asi hodně sloupců
Čistější leč složitější by bylo mít products M:N product_attribute_values N:1 product_attributes (EAV pattern) a k danému produktu by tak byly 3 položky v product_attributes typu velikost s hodnotama L, XL, XXL. Pak bys vyhledal produkty, které mají připojenou položku hodnoty atributu velikost s hodnotou XL.
Je to ale asi lepší pro úpravy a rozšířování, řeší to tvůj problém. Má to mj. implementované i OpenCart, tak se tam můžeš inspirovat