Autor | Zpráva | ||
---|---|---|---|
rrak Profil |
#1 · Zasláno: 25. 2. 2013, 17:25:42 · Upravil/a: Moderátor (editace znemožněna) 25. 2. 2013, 22:24:36
Zdravím,
potřeboval bych radu někoho šikovného mám tabulku vzi níže. do které ukládám parametry produktů v eshopu. A teď jsem se rozhodl přidat si ve výpisu produktů v eshopu filtr dle parametrů.. A problém nastává v tom že bych potřeboval podle této tabulky získat id produktů které jsou ve sloupci produkt podle toho co bude vybráno ve filtrech. Například ve filtru bude že rrak=15, delka=6 mel by me vyjet produkt id:8. Nebo ve fiultru bude jen rrak=7 a melo by me to vyhodit dva radky produkt id: 9 a 10 Mohl by někdo poradit zda li je to vůbec možné sestavit takhle dotaz. A pokud to jde poprosil bych o radu jak na to. Zkoušel jsem to přes group ale to není dostačující protože bych potřeboval ověřovat více parametrů než jen jeden a tak si s tím nevím rady. Předem moc děkuji CREATE TABLE IF NOT EXISTS `shop_produkty_parametry` ( `id` int(11) NOT NULL auto_increment, `produkt` int(11) NOT NULL, `parametr` varchar(255) collate utf8_czech_ci NOT NULL, `value` int(11) default NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=56 ; INSERT INTO `shop_produkty_parametry` (`id`, `produkt`, `parametr`, `value`) VALUES (31, 8, 'rrak', 15), (26, 8, 'delka', 6), (27, 8, 'vyska', 6), (28, 8, 'sirka', 6), (29, 8, 'pocet_v_baleni', 6), (30, 8, 'kvalita', 6), (32, 7, 'delka', 11), (33, 7, 'vyska', 11), (34, 7, 'sirka', 6), (35, 7, 'pocet_v_baleni', 6), (36, 7, 'kvalita', 6), (37, 7, 'rrak', 6), (38, 6, 'delka', 9), (39, 6, 'vyska', 9), (40, 6, 'sirka', 8), (41, 6, 'pocet_v_baleni', 8), (42, 6, 'kvalita', 8), (43, 6, 'rrak', 7), (44, 9, 'delka', 7), (45, 9, 'vyska', 7), (46, 9, 'sirka', 7), (47, 9, 'pocet_v_baleni', 7), (48, 9, 'kvalita', 7), (49, 9, 'rrak', 7), (50, 10, 'delka', 12), (51, 10, 'vyska', 9), (52, 10, 'sirka', 11), (53, 10, 'pocet_v_baleni', 14), (54, 10, 'kvalita', 7), (55, 10, 'rrak', 7); Moderátor Kajman: Vkládej prosím kódy mezi značky [>pre] a [>/pre] (stačí kliknout na ).
|
||
Tori Profil |
#2 · Zasláno: 25. 2. 2013, 17:51:22
rrak:
Produkt odpovídá zadání filtru, pokud se shodují všechny zvolené vlastnosti, anebo pokud se shodují aspoň některé? V druhém případě to řadíte podle počtu shodných vlastností sestupně, nebo různé vlastnosti mají různou váhu (shodná barva je důležitější než shodný počet kusů v balení)? |
||
juriad Profil |
#3 · Zasláno: 25. 2. 2013, 18:14:47
SELECT DISTINCT t1.produkt FROM shop_produkty_parametry t1 INNER JOIN shop_produkty_parametry t2 USING (produkt) WHERE ( t1.parametr = "rrak" AND t1.value = 15 ) AND ( t2.parametr = "delka" AND t2.value = 6 ) Prostě si napřed přijoinuješ tu samou tabulku tolikrát, kolik máš kritérií a následně nad každou tabulkou budeš filtrovat podle jednoho kritéria. |
||
Kajman Profil |
#4 · Zasláno: 25. 2. 2013, 22:17:15
V případě hledání současného splnění podmínek se může použít i něco jako
select `produkt` from `shop_produkty_parametry` where (`parametr`,`value`) in (('rrak',15), ('delka',6)) group by `produkt` having count(distinct `parametr`,`value`) = 2 # pocet hledanych kombinaci |
||
rrak Profil |
#5 · Zasláno: 26. 2. 2013, 10:08:29
Kajman:
Děkuji toto je řešení které jsem hledal. |
||
Časová prodleva: 11 let
|
0