Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Rekurencyjne pobieranie wszystkich potomków rodzica.
Forum PHP.pl > Forum > Bazy danych > MySQL
Damonsson
Jest jakiś sposób, żeby jednym zapytaniem MySQL pobrać wszystkich potomków rodzica. Kiedy struktura tabeli wygląda tak: category_id | category_name | parent

Wszystkich przodków dla danej kategorii 9999 pobieram tak:

  1. SELECT T2.category_id ,T2.category_name
  2. FROM (
  3. SELECT
  4. @r AS _id,
  5. (SELECT @r := parent FROM categories WHERE category_id = _id) AS parent,
  6. @l := @l + 1 AS lvl
  7. FROM
  8. (SELECT @r := 9999, @l := 0) vars,
  9. categories m
  10. WHERE @r <> 0) T1
  11. JOIN categories T2
  12. ON T1._id = T2.category_id
  13. ORDER BY T1.lvl DESC


Nie mam pojęcia jak jednak pobrać wszystkich potomków. Da się w ogóle, w podobny sposób?

Nie mogę dodawać zakresu dla kategorii, ani głębokości. Struktura musi być taka jaka jest. Próbowałem nawet tworzyć jakieś procedury, ale udało mi się najwyżej pobrać 2 poziomy niżej niż rodzic, a już i tak nie wiem jak to zrobiłem.
kipero
W MSSQL do tego rodzaju zapytań służy CTE, ale w MySQL brak podobnego mechanizmu. Należy więc skorzystać z procedur składowanych. Podobny problem został rozwiązany tutaj - http://stackoverflow.com/questions/5291054...5291159#5291159
Damonsson
No właśnie MySQL jest tutaj ubogi. Pół dnia siedziałem na stackoverflow i nie znalazłem tego tematu, wydaje się być ok. Póki co rozwiązałem to po stronie php. Ale jak przyjdzie czas na optymalizację, na pewno skorzystam z tego rozwiązania.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.