Autor Zpráva
crossbone
Profil *
Ahoj,
píšu e-shop, mám tabulku produktů a tabulku parametrů k produktům. Je tam takovej filtr, kde si uživatel podle parametrů postuptně vybere co chce za produkt. Od toho WHERE to generuju cyklama,

SELECT * FROM produkty WHERE id IN (SELECT idProdukt FROM parametry_hodnoty WHERE (hodnota='10' AND idParametr='2') OR (hodnota='15' AND idParametr='2')) AND id IN (SELECT idProdukt FROM parametry_hodnoty WHERE (hodnota='200' AND idParametr='4'))


jak si můžete všimnou tak to řeším poddotazama, ale je to dosti pomalý na zpracování, tak se ptám jestli to nejde napsat ještě jinak..
předem díky za ochotu ;)
Jan Tvrdík
Profil
Zkoušel jsi přidat EXPLAIN? Máš daný správně indexy?
crossbone
Profil *
co je to explain? jaký indexy? sorry ale mysql moc nedávám :(
Jan Tvrdík
Profil
Potřebuješ mít index na id, hodnota a idParametr. EXPLAIN ti řekne, jak se ty indexy použijí.
crossbone
Profil
indexy nastavený pravděpodobně nemám... není spíš nějakej českej návod?:D
crossbone
Profil
id v tabulce produkty je primární klíč - to je tak celý
fuckin
Profil
v cestine je explain trochu vysvetlen zde http://www.linuxsoft.cz/article.php?id_article=369

Priste hledej pak se ptej.
Kajman_
Profil *
SELECT * FROM produkty p,
(SELECT idProdukt FROM parametry_hodnoty WHERE (hodnota in ('10','15') AND idParametr='2') OR  (hodnota='200' AND idParametr='4')
group by idProdukt
having count(distinct idParametr)=2) t
where p.id=t.idProdukt
Kajman_
Profil *
A hodil by se index na idParametr.
crossbone
Profil
Kajman_
můžeš mi prosim vysvětlit co ten dotaz vlastně znamená?
Kajman_
Profil *
S čím máte problémy? Prostě se vyberou chtěné parametry, seskupí se podle produktu a vyberou se jen takové, kde oba parametry byly nalezeny. Nebo to nedělá, co má?
crossbone
Profil
tak vzhledem k tomu že ten dotaz vlastně skládám cyklem tak by se mi hodilo vědět co tam například dělá toto
having count(distinct idParametr)=2)
jsem asi úplně bl*ej ale nedochází mi to, sry
Kajman_
Profil *
Po seskupení vybere jen ty skupiny, kde počet různých nenullových hodnot v idParametr je právě 2 (hledáte hodnoty '2' a '4').

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: