Ahoj,
zrovna řeším e-shop, respektive jeho vylepšení, a rád bych tam nějakým rozumným způsob udělal parametry pro každou kategorii, tak aby si je uživatel mohl sám nastavit a řeším jak to ukládat rozumně do databáze. Protože každá kategorie bude mít jiný počet a typ parametrů, tak se to nedá ukládat do tabulky s produkty. Jediné řešení, které mě napadlo je vytvořit pro každou kategorii tabulku s jejími parametry. Prakticky to řeší asi všechny problémy. Ovšem na druhou stranu je tu složitější přístup k datům (spojování několika tabulek, parametry se dědí z nadřazených kategorií), taky si nejsem jistý rychlostí a hlavně se mi nelíbí samovolné vytváření tabulek, proto jsem se zde chtěl zeptat, zda nemá někdo lepší nápad?
Fórum › MySQL
E-shop - parametry prodtů
To ondrav : Proč pro každou kategorii? Stačí mít jednu tabulku, kde budeš ukládat parametr a id kategorie (cizí klíč). Potom to jednoduše spojíš přes SQL.
Třízení bude stejné, jako kdyby to bylo rozházené do víc tabulek. Akorát do dotazu přidáš podmínku, pomocí které vybereš jen určitou kategorii (podle ID).
Já už tě asi začínám chápat :)
Problém je, že každá kategorie bude mít jiné parametry. Ty navíc budou různých typů, takže se nedá udělat univerzální tabulka, která by byla pro některé kategorie s přesahem. Navíc se parametry budou dědit z nadřazené kategorie. To co píšeš ty je pro všechny kategorie stejné, nebo ne?
Příklad:
Kategorie 1 - balení (int)
Kategorie 2 - barva (varchar), obrazovka (bool), délka(float), výška(float), hloubka(float)...
Kategorie 3 - Kategorie 2 + napájení(tinyint), připojení(tinyint)
Pak je otázka, jestli není lepší použít třeba nějaké datové úložiště využívající xml než používat mysql. Ale záleží na objemu dat, počtu požadavků, atd.
To ondrav : Záleží jaký máš server, jaké je zatížení. Ale pro těch pár položek by xml mohlo být podstatně pružnější než nějak obcházet možnosti mysql, příp. vytvářet nějaké hodně široké tabulky. Samozřejmě to chce mít nějaký rozumný nástroj, nebastlit to ručně.
Podle mě se to i tak dá řešit tou jednou tabulkou pro parametry.
zboží
select * from zbozi;
+----+--------------+------+
| id | nazev | neco |
+----+--------------+------+
| 1 | maly | aaa |
| 2 | velky | bbb |
| 3 | maly cerveny | ccc |
| 4 | velky kulaty | ddd |
+----+--------------+------+
parametryselect * from parametry;
+----+-------+----------+------------+------------+
| id | zbozi | parametr | hodnotaint | hodnotastr |
+----+-------+----------+------------+------------+
| 1 | 1 | velikost | 3 | NULL |
| 2 | 2 | velikost | 7 | NULL |
| 3 | 3 | velikost | 2 | NULL |
| 4 | 3 | barva | NULL | cervena |
| 5 | 4 | velikost | 9 | NULL |
| 6 | 4 | tvar | NULL | kulaty |
+----+-------+----------+------------+------------+
kompletselect * from zbozi join parametry on parametry.zbozi=zbozi.id;
+----+--------------+------+----+-------+----------+------------+------------+
| id | nazev | neco | id | zbozi | parametr | hodnotaint | hodnotastr |
+----+--------------+------+----+-------+----------+------------+------------+
| 1 | maly | aaa | 1 | 1 | velikost | 3 | NULL |
| 2 | velky | bbb | 2 | 2 | velikost | 7 | NULL |
| 3 | maly cerveny | ccc | 3 | 3 | velikost | 2 | NULL |
| 3 | maly cerveny | ccc | 4 | 3 | barva | NULL | cervena |
| 4 | velky kulaty | ddd | 5 | 4 | velikost | 9 | NULL |
| 4 | velky kulaty | ddd | 6 | 4 | tvar | NULL | kulaty |
+----+--------------+------+----+-------+----------+------------+------------+
malý nebo červenýselect z.id, z.nazev from zbozi z join parametry p on p.zbozi=z.id where (p.parametr = 'velikost' and p.hodnotaint < 5) or (p.parametr = 'barva' and p.hodnotastr = 'cervena') group by z.id;
+----+--------------+
| id | nazev |
+----+--------------+
| 1 | maly |
| 3 | maly cerveny |
+----+--------------+
malý a červenýselect z.id, z.nazev from zbozi z join parametry p on p.zbozi=z.id where (p.parametr = 'velikost' and p.hodnotaint < 5) or (p.parametr = 'barva' and p.hodnotastr = 'cervena') group by z.id having count(*)=2;
+----+--------------+
| id | nazev |
+----+--------------+
| 3 | maly cerveny |
+----+--------------+
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
E-shop — založil -A-N-D-R-E-J-
E-Shop zdarma — založil Figa
E-shop s elektrotechnikou — založil Michal
Systém pro e.shop — založil hrach
Moderátoři diskuze