SELECT category_id, category_parent_id, category_path, category_name FROM categories WHERE category_path REGEXP '7\\.([0-9]+[\\.]?){0,2}$';
Wyciąga ono wszystkie podkategorie (do głębokości 2) z kategorii o id = 7.
Przykład - dla danych:
Kod
id | parent_id | sort_order | depth | path | name
---+-----------+----------------------------------+-------------
1 | 0 | 1 | 0 | 1 | Motoryzacja
2 | 1 | 1 | 1 | 1.2 | Samochody
3 | 2 | 1 | 2 | 1.2.3 | Osobowe
7 | 1 | 4 | 1 | 1.7 | Motocykle
27 | 3 | 1 | 3 | 1.2.3.27 | Fiat
28 | 3 | 1 | 3 | 1.2.3.28 | Audi
29 | 3 | 1 | 3 | 1.2.3.29 | BMW
30 | 3 | 1 | 3 | 1.2.3.30 | Opel
31 | 27 | 1 | 4 | 1.2.3.27.31 | Uno
32 | 27 | 1 | 4 | 1.2.3.27.32 | Tipo
33 | 27 | 1 | 4 | 1.2.3.27.33 | Bravo
34 | 27 | 1 | 4 | 1.2.3.27.34 | Brava
---+-----------+----------------------------------+-------------
1 | 0 | 1 | 0 | 1 | Motoryzacja
2 | 1 | 1 | 1 | 1.2 | Samochody
3 | 2 | 1 | 2 | 1.2.3 | Osobowe
7 | 1 | 4 | 1 | 1.7 | Motocykle
27 | 3 | 1 | 3 | 1.2.3.27 | Fiat
28 | 3 | 1 | 3 | 1.2.3.28 | Audi
29 | 3 | 1 | 3 | 1.2.3.29 | BMW
30 | 3 | 1 | 3 | 1.2.3.30 | Opel
31 | 27 | 1 | 4 | 1.2.3.27.31 | Uno
32 | 27 | 1 | 4 | 1.2.3.27.32 | Tipo
33 | 27 | 1 | 4 | 1.2.3.27.33 | Bravo
34 | 27 | 1 | 4 | 1.2.3.27.34 | Brava
to zapytanie nie powinno nic zwrócić bo kategoria "Motocykle" nie ma podkategorii, natomiast zwraca:
Kod
id | parent_id | sort_order | depth | path | name
---+-----------+----------------------------------+-------------
31 | 27 | 1 | 4 | 1.2.3.27.31 | Uno
32 | 27 | 1 | 4 | 1.2.3.27.32 | Tipo
33 | 27 | 1 | 4 | 1.2.3.27.33 | Bravo
34 | 27 | 1 | 4 | 1.2.3.27.34 | Brava
---+-----------+----------------------------------+-------------
31 | 27 | 1 | 4 | 1.2.3.27.31 | Uno
32 | 27 | 1 | 4 | 1.2.3.27.32 | Tipo
33 | 27 | 1 | 4 | 1.2.3.27.33 | Bravo
34 | 27 | 1 | 4 | 1.2.3.27.34 | Brava
Czyli należałoby dopracować początek REGEXP-a by dopuścił ścieżki:
Cytat
x.x.x.x.7.(dalsza część ścieżki)
albo
Cytat
7.(dalsza część ścieżki)
ale nie:
Cytat
x.x.x.x7.(dalsza część ścieżki)
(Zwróćcie uwagę na kropki przy siódemce).
Ktoś wie jaki powinien być wzorzec?
EDIT: Już sobie poradziłem:
SELECT id, parent_id, path, name FROM categories WHERE path REGEXP '^([0-9]+[\\.])*7\\.([0-9]+[\\.]?){0,2}$';