Join na tabulku s parametry

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
koprkuba
Člen | 24
+
0
-

Ahoj,
mám následující strukturu databáze:

products
+-------------+--------------------------+------+-----+---------+----------------+
| Field       | Type                     | Null | Key | Default | Extra          |
+-------------+--------------------------+------+-----+---------+----------------+
| id          | int(10) unsigned         | NO   | PRI | NULL    | auto_increment |
| name        | varchar(255)             | NO   |     | NULL    |                |
+-------------+--------------------------+------+-----+---------+----------------+
param_values
+-------------+--------------------------+------+-----+---------+----------------+
| Field       | Type                     | Null | Key | Default | Extra          |
+-------------+--------------------------+------+-----+---------+----------------+
| id          | int(10) unsigned         | NO   | PRI | NULL    | auto_increment |
| value       | int(16) unsigned         | NO   | MUL | NULL    |                |
+-------------+--------------------------+------+-----+---------+----------------+
product_params
+-----------------+---------------- -------------+------+-----+---------+----------------+
| Field           | Type                         | Null | Key | Default | Extra          |
+-----------------+------------------------------+------+-----+---------+----------------+
| id              | int(11)                      | NO   | PRI | NULL    | auto_increment |
| product_id      | int(11)                      | NO   |     | NULL    |                |
| param_name      | ENUM                         | NO   | MUL | NULL    |                |
| param_values_id | int(11)                      | NO   |     | NULL    |                |
+-----------------+------------------------------+------+-----+---------+----------------+

Potřeboval bych sestavit dotaz, který bude filtrovat produkty podle parametrů (tabulky product_params).
Řekněmě, že parametry jsou „color, size, handmade, … “

a já chci najít všechny produkty které mají velikost „Medium“ a zároveň mají „Černou“ barvu + případně další parametry. Tj. chci vytvářet subsety na základě parametrů. (klasický filtr)

Přes normální SQL Join to nechci dělat, jelikož je parametrů opravdu hodně a mám pocit, že bych pro každý musel dělat další jeden join.

Máte někdo nějaký nápad jak se nad touto strukturou dotazovat?
Problém join tabulek je také v tom, že dat je opravdu hodně, řádově desítky tisích záznamů a JOIN trvá věčnost.
Se strukturou databáze nic neudělám, přistupuje k ní ještě jiné API a to by se muselo předělávat také.

Editoval koprkuba (12. 12. 2014 9:38)