ponieważ nie mogę za bardzo znaleźć jakiegoś rozwiązania w internecie postanowiłem, że może ktoś tutaj byłby w stanie pomóc mi z problemem.
Konstrukcja tabel
#profil
id | nazwa | opis | status
#profil_kategoria
id | sub_category | profil
#sub_category
id | main_category | nazwa
#main_category
id | nazwa
Co potrzebuję osiągnąć?
1. Wyciągnąć z bazy danych wyniki wyszukiwania w postaci:
REKORD =
nazwa,
id kategorii głównych (main_category), do których przypisany jest profil oraz...
id wszystkich podkategorii, do których przypisany jest profil za pomocą tabeli #profil_kategoria.
Następnie podczas wyszukiwania w przypadku np. lista.php?subkategoria=4, aby zapytanie sprawdziło, które profile należą do tej podkategorii... ale mimo wszystko aby na liście pobrały się wszystkie podkategorie...
Dodam, że profile mogą być przypisane do kilku podkategorii.
Jak obecnie wygląda moje zapytanie?
SELECT a.nazwa, group_concat(d.nazwa) AS kategoria, group_concat(b.sub_category) AS kategoriaid, group_concat(c.nazwa) AS podkategoria FROM profil a LEFT JOIN profil_kategorie b ON b.profil = a.id LEFT JOIN sub_category c ON b.sub_category = c.id LEFT JOIN main_category d ON d.id = c.main_category WHERE 1 GROUP BY a.id HAVING podkategoria LIKE '%nazwa_kategorii pobieranej z get%'
Problem w tym, że pomimo pobierania kolumny "kategoriaid" i tak nie mogę jej wykorzystać.
Zapytanie... niestety trochę długo trwa i tutaj tkwi problem. Tak naprawdę nie potrzebuje wyciągać całych nazw kategorii i mógłbym wykorzystać same numerki kategorii. Zastanawiałem się, aby zrobić HAVING kategoriaid LIKE '%nr podkategorii%' wyszukiwanej w ciągu zrobionym przez group_concat() tj. np. "45,66,23"... ale nic z tego, bo HAVING LIKE nie ma chyba(?) zastosowania do numerów.
Znacie może jakieś rozwiązanie? Które pozwoliło by mi zoptymalizować to zapytanie, aby je trochę przyspieszyć? i zamiast wyciągać całych nazw kategorii po prostu zadziałać na numerach? - niestety potem zapytanie będę musiał dodatkowo rozbudować o województwa... a tak jak kat. - profile mogą być przypisane do więcej niż jednego.
Mam nadzieję, że udało mi się opisać dokładnie mój problem.
Dzięki, pozdrawiam.