Tabela `produkty` wygląda tak:
product_id | product_cat_id | product_name
1 | 5 | 'Tir',
2 | 5 | 'Nowy tir',
3 | 3 | 'Auto osobowe'
Tabela `kategorie`:
cat_id | cat_parent | cat_level | cat_root | cat_name
1 | NULL | 0 | 1 | 'Samochody',
2 | NULL | 0 | 2 | 'Motocykle',
3 | NULL | 1 | 1 | 'Osobowe',
4 | NULL | 1 | 1 | 'Dostawcze',
5 | NULL | 4 | 1 | 'Tiry'
Mam menu w którym wyświetlam sobie wszystkie kategorie główne w ten sposób:
SELECT * FROM kategorie WHERE cat_parent IS NULL ORDER BY cat_name
I pokazuje mi wszystkie kategorie główne. Po wejściu w kategorię np. "Samochody" pokazuje mi podkategorie (jeśli istnieją) oraz pod nimi listę produktów z kategorii głównej (czyli "Samochody"), a jeżeli nie istnieją podkategorie to pokazuje tylko produkty z tej kategorii. Na tym etapie jest wszystko dobrze.
Ten skrypt:
SELECT * FROM kategorie as cat, produkty as prod WHERE prod.product_cat_id = cat.cat_id AND cat.cat_root = '".$cat['cat_root']."' ORDER BY prod.product_id DESC
Wcześniej sobie sprawdzam czy dana kategoria ma jakieś podkategorie, czy istnieją w niej produkty itd.
Po wejściu w "Samochody" > "Osobowe" (gdzie nie ma już podkategorii dalej i jest jeden produkt też ładnie działa. Kod za to odpowiedzialny:
SELECT * FROM produkty WHERE product_cat_id = '".$cat['cat_id']."' ORDER BY product_id DESC
Wcześniej podobnie jak wyżej sprawdzam czy istnieją podkategorie, jeśli nie to wrzucam to zapytanie wyżej, a jeśli istnieją to te jeszcze wyżej.
Problem zaczyna się jak wejdę w "Samochody" > "Dostawcze". W tej podkategorii powinno pokazać mi dwa rekordy, a pokazuje wszystkie rekordy gdzie cat_root = x co w sumie jest normalne bo przecież taki jest warunek... problem w tym że nie wiem jak to inaczej zapisać, a jak usunę to cat.cat_root = '".$cat['cat_root']."' to wtedy nie pokaże mi produktów po wejściu w kategorię główną...
Kombinowałem też z cat_level, ale tak samo bez pozytywnych skutków... a takie cuda robiłem, że nie jeden czarodziej by się zawstydził