Zlozitejsie vyhladavanie v MySQL tabulke

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
tolljump
Člen | 47
+
0
-

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
+
0
-

Š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