produkty - tabela z produktami
kategorie - tabela z kategoriami gdzie kolumna id_matki świadczy o istnieniu podkategorii kategorii z wpisanym tam ID
produkty_kategorie - relacja na zasadzie id_produktu <-> id_kategorii (powód: wiele kategorii do jednego produktu i odwrotnie)
Sytuacja jest następująca:
Mamy 5000 produktów, 1000 kategorii schierarchozowanych w postaci drzewka kategorii. Powiedzmy, że drzewko kategorii wygląda tak:
Komputery
---- PC
---- LAPTOPY
---- MAC
Kiedy kliknę w kategorie komputery powinny pokazać sie wszystkie produkt przypisane do niej oraz do jej kategorii. System zakłada, że nie ma ilości ograniczenia zagłębień w podkategoriach.
Tak więc musimy pobrać te produkty, dla których w tabeli produkty_kategorie istnieje powiązanie na zasadzie id_produktu -> id_kategorii. Dzieje się to dla wszystkich 4 kategorii.
Powstaje coś takiego:
EXISTS (SELECT id_produktu, id_kategorii FROM produktykategorie WHERE id_produktu = produkty.id AND id_kategorii = '1' LIMIT 1 ) OR EXISTS (SELECT id_produktu, id_kategorii FROM produktykategorie WHERE id_produktu = produkty.id AND id_kategorii = '2' LIMIT 1 ) OR EXISTS (SELECT id_produktu, id_kategorii FROM produktykategorie WHERE id_produktu = produkty.id AND id_kategorii = '3' LIMIT 1 ) OR EXISTS (SELECT id_produktu, id_kategorii FROM produktykategorie WHERE id_produktu = produkty.id AND id_kategorii = '4' LIMIT 1 )
Mamy więc 4 id kategorii. Zapytanie tego typu jest masakrycznie mało wydajne. Przy kilku tysiącach produktów, kiluset kategoriach i kategorii, która ma powiedzmy kilkanaście podkategorii tworzy się zapytnie wypierniczające serwer.
Moje pytanie brzmi jak wykonać taki proces w sposób możliwie najbardziej ergonomiczny?