Autor Zpráva
rrak
Profil
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
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
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
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
Kajman:
Děkuji toto je řešení které jsem hledal.

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: