Portál AbcLinuxu, 10. listopadu 2025 22:05
select p.* from produkty p inner join produkt_parametry pp on p.id = pp.produkt_id where (pp.parametr_id = 8 and pp.parametr_vlastnost = 'cervena') or (pp.parametr_id = 10 and pp.parametr_vlastnost = 'zluta')Pokud ne, tak bych zkusil z db vytáhnout záznamy pro každou podmínku zvlášť a unionem výsledky spojit dohromady.
select * from produkty where id in (select produkt_id from produkt_parametry where parametr_id = 8 and parametr_vlastnost = 'cervena') and id in (select produkt_id from produkt_parametry where parametr_id = 10 and parametr_vlastnost = 'zluta')Psal jsem to z hlavy, asi by se našlo i nějaké elegantnější řešení.
SELECT produkty.* FROM produkty, produkt_parametry AS p1, produkt_parametry AS p2 WHERE produkty.id = p1.produkt_id AND produkty.id = p2.produkt_id AND p1.parametr_id = 8 AND p1.parametr_vlastnost = 'cervena' AND p2.parametr_id = 10 AND p2.parametr_vlastnost = 'zluta'
Neměli byste ještě tip, na nějakou knihu o MYSQL (jak jsem se zmiňoval v 1. příspěvku)?Např. MySQL Cookbook
Vypadá to, že MySQL-isté se tradičně vyhýbají joinům ( :-) ), takže
select ... from PRODUKTY P
inner join PRODUKT_PARAMETRY P1 on P1.PRODUKT_ID=P.ID and P1.PARAMETR_ID=8 and P1.PARAMETR_VLASTNOST='cervena'
inner join PRODUKT_PARAMETRY P2 on P2.PRODUKT_ID=P.ID and P2.PARAMETR_ID=10 and P2.PARAMETR_VLASTNOST='cervena'
(za předpokladu, že (PRODUKT_ID,PARAMETR_ID) v tabulce PRODUKT_PARAMETRY je unique).
Mimochodem, k čemu je v tabulce PRODUKT_PARAMETRY sloupec ID?
'zluta'.
PARAMETR_ID.
ID v tabulce přeci potřebuje, jak pak prováže produkty a jejich parametry?
Na to nepotřebuje ID v tabulce parametrů:
alter table PRODUKT_PARAMETRY add foreign key (PRODUKT_ID) references PRODUKTY(ID)
SELECT ...`slúpec`... FROM `produkty` AS `p`
INNER JOIN `produkt_parametry` AS `p1` ON `p1`.`produkt_id`=`p`.`id` AND `p1`.`parametr_id`=8 AND `p1`.`parametr_vlastnost`='cerevena'
INNER JOIN `produkt_parametry` AS `p2` ON `p2`.`produkt_id`=`p`.`id` AND `p2`.`parametr_id`=10 AND `p2`.`parametr_vlastnost`='zluta'
order, tak by to asi neprošlo, ale jako `order` nebude problém.
order je toho příkladem. Nelíbí se mi atribut s názvem position.
order_?
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.