Autor | Zpráva | ||
---|---|---|---|
crossbone Profil * |
#1 · Zasláno: 1. 8. 2009, 23:35:36
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 |
#2 · Zasláno: 1. 8. 2009, 23:38:32 · Upravil/a: Jan Tvrdík
Zkoušel jsi přidat EXPLAIN? Máš daný správně indexy?
|
||
crossbone Profil * |
#3 · Zasláno: 1. 8. 2009, 23:43:13
co je to explain? jaký indexy? sorry ale mysql moc nedávám :(
|
||
Jan Tvrdík Profil |
#4 · Zasláno: 1. 8. 2009, 23:45:05
Potřebuješ mít index na id, hodnota a idParametr. EXPLAIN ti řekne, jak se ty indexy použijí.
|
||
crossbone Profil |
#5 · Zasláno: 1. 8. 2009, 23:51:44
indexy nastavený pravděpodobně nemám... není spíš nějakej českej návod?:D
|
||
crossbone Profil |
#6 · Zasláno: 2. 8. 2009, 00:07:55
id v tabulce produkty je primární klíč - to je tak celý
|
||
fuckin Profil |
#7 · Zasláno: 2. 8. 2009, 10:22:24
v cestine je explain trochu vysvetlen zde http://www.linuxsoft.cz/article.php?id_article=369
Priste hledej pak se ptej. |
||
Kajman_ Profil * |
#8 · Zasláno: 2. 8. 2009, 10:47:23
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 * |
#9 · Zasláno: 2. 8. 2009, 10:48:56
A hodil by se index na idParametr.
|
||
crossbone Profil |
#10 · Zasláno: 2. 8. 2009, 19:18:43
Kajman_
můžeš mi prosim vysvětlit co ten dotaz vlastně znamená? |
||
Kajman_ Profil * |
#11 · Zasláno: 2. 8. 2009, 21:35:52
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 |
#12 · Zasláno: 3. 8. 2009, 08:15:16
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) |
||
Kajman_ Profil * |
#13 · Zasláno: 3. 8. 2009, 08:42:42
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').
|
||
Časová prodleva: 15 let
|
0