Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Rekurencyjne pobieranie wszystkich potomków rodzica., Przy niezmiennej strukturze: category_id | category_name | parent
Damonsson
post
Post #1





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Damonsson 22.02.2013, 00:13:19
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
kipero
post
Post #2





Grupa: Zarejestrowani
Postów: 233
Pomógł: 50
Dołączył: 28.10.2006
Skąd: Radom

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
Damonsson
post
Post #3





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 16:00