Mam 3 tabele: produkty, kategorie i pro_cat_link. Produkt można połączyć z jedną lub wieloma kategoriami za pomocą tabeli pro_cat_link.Zapytanie SQL, aby znaleźć produkty pasujące do zestawu kategorii
Moje zapytanie musi odpowiedzieć na następujący problem: znaleźć wszystkie produkty pasujące do zestawu kategorii. Np .: znajdź wszystkie produkty "żółte ORAZ ORAZ słodkie".
Kiedy bada ten problem, więc mogłem tylko znaleźć rozwiązanie, co obecnie używam: Complicated SQL Query--finding items matching multiple different foreign keys
W moim przypadku, moja kwerenda wygląda następująco:
SELECT products.id, COUNT(DISTINCT categories.id) as countCat
FROM products
INNER JOIN pro_cat_link ON (pro_cat_link.product_id = products.id)
WHERE pro_cat_link.category_id IN (3,6,8,10)
GROUP BY product.id
ORDER BY product.date DESC
HAVING countCat = 4
Innymi słowy, wybierz wszystkie produkty, które pasują do identyfikatorów kategorii (3,6,8,10) i zachowaj tylko te, które pasują dokładnie do 4 kategorii.
Działa to dobrze, ale mam problemy z wydajnością, ponieważ funkcja COUNT(), GROUP BY, ORDER BY powoduje, że indeksowanie jest bardzo ograniczone. Czy ktokolwiek może wymyślić lepszy sposób rozwiązania tego problemu?
Zakładam, że samo robienie połączenia dla każdej kategorii trwa zbyt długo? – Jodaka
@Jodaka Tak. Menedżerowie wymagają, aby użytkownik mógł wybrać tyle kategorii, ile chce;) – Tchoupi