Autor Zpráva
V_B
Profil
Ahoj,
mám tabulku v mysql databázi která obsahuje sloupce id, id_produktu, id_vlastnosti. Každý řádek má jednu vlastnost, která je definována číslem.
Potřebuji vytvořit takový dotaz, který by mi vyplivnul produkty, které mají např. vlastnost 9 nebo 10 a současně vlastnosti 11 a 12 a také 14. Když v dotazu použiji danou tabulku vícektrát, tak je výsledek správný. Dotaz je ale hodně náročný na db, když je vlastností více. Neporadil byste někdo jak zoptimalizovat dotaz aby byl jen přes jednu tabulku?

Dotaz:
SELECT 
DISTINCT t.id_produkt 
FROM tabulka t, tabulka t1, tabulka t2, tabulka t3  
WHERE 
t.id_produkt=t1.id_produkt AND t.id_produkt=t2.id_produkt AND t.id_produkt=t3.id_produkt
AND 
(
t1.id_vlastnost IN(9,10)
AND t2.id_vlastnost IN(11,12)
AND t3.id_vlastnost IN(14)
)

Díky za radu
Kajman
Profil
Zkuste, zda nebude rychlejší něco takového
SELECT t.id_produkt
FROM   tabulka t
       JOIN (SELECT 1 podminka,  9 id_vlastnost FROM DUAL UNION ALL
             SELECT 1 podminka, 10 id_vlastnost FROM DUAL UNION ALL
             SELECT 2 podminka, 11 id_vlastnost FROM DUAL UNION ALL
             SELECT 2 podminka, 12 id_vlastnost FROM DUAL UNION ALL
             SELECT 3 podminka, 14 id_vlastnost FROM DUAL) p
         ON t.id_vlastnost = p.id_vlastnost
GROUP  BY t.id_produkt
HAVING Count(DISTINCT p.podminka) = 3
TomášK
Profil
Kajman
Spojuješ přes neexistující sloupec p.id_vlastnost, spravně má být myslím SELECT 1 podminka, 9 id_vlastnost FROM DUAL.

V_B
Použitá struktura databáze je často považovaná za anti-pattern, viz en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model, www.root.cz/clanky/na-co-si-dat-pozor-pri-navrhu-databaze
Kajman
Profil
TomášK:
Díky, upraveno.
V_B
Profil
Díky za typ na dotaz i za odkaz na článek.

Dotaz pomoci JOIN jsem také zkoušel hned na začátku, ale časový výsledek byl hodně podobný. V případě několika parametrů mysql dotaz zvládne relativně rychle, ale když se dostane za nějakou hodnotu(větší počet parametrů) už nestačí RAM a dochází k velkému zpomalení, zřejmě mi tedy nezbude než předělat strukturu tabulky, na umístnění parametrů do sloupců, čemuž jsem se chtěl vyhnout, protože parametry jsou v každé kategorii hodně proměnlivé a dost často se mažou, přidávají a bude se tak dost často měnit počet sloupců v tabulce.

Bohužel je to přesně tak jak se píše ve článku na rootu.

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:

0