Portál AbcLinuxu, 14. května 2025 06:01
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.