Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] Pobieranie wszystkich rodziców kategorii
Forum PHP.pl > Forum > Bazy danych > MySQL
netvalue
Hej

Mam typowo tabelkę kategorii:
  1. id | id_parent | name
  2. 1 | 0 | kategoria
  3. 2 | 0 | kategoria 2
  4. 3 | 1 | subkategoria
  5. 4 | 3 | ostatnia podkategoria
  6. 5 | 3 | ostatnia podkategoria 2
  7.  
  8.  


teraz jak stworzyć stworzyć zapytanie aby pobrać wszystkie kategorie nadrzędne dla kategorii o id 4 i 5.
Tak żeby też nie było zdublowania kategoria o id 3 , do której należą kategorie 4 i 5.


Docelowo chce uzyskać drzewo

-kategoria
--subkategoria
---ostatnia podkategoria
---ostatnia podkategoria 2

obecnie mam takie zapytanie:
  1. SELECT T2.id_category, T2.name
  2. FROM (
  3. SELECT
  4. @r AS _id,
  5. (SELECT @r := id_parent FROM category WHERE id_category = _id) AS id_parent,
  6. @l := @l + 1 AS lvl
  7. FROM
  8. (SELECT @r := 4, @l := 0) vars,
  9. category h
  10. WHERE @r <> 0) T1
  11. JOIN category T2
  12. ON T1._id = T2.id_category
  13. ORDER BY T1.lvl DESC


i otrzymuje drzewko w górę ale tylko dla podkategorii ID 4. Moglbym wykonac ponownie te zapytanie dla ID 5 ale otrzymam znowu drugie drzewko...
chyba ze bym wykonal dwa takie zapytania dla kazdego ID odzielnie (4,5) wrzucil rezultaty do tablicy php i nastepnie polaczyl te tablice ze sobą z wykluczeniem zdublowanych id kategorii..
hmmm jest to jakies rozwiazanie ale chyba malo optymalne robic odzielne takie zapytania dla kazdego ID odzielnie biorac pod uwage ze moze byc ich nawet 100
Pyton_000
Znień strukturę jeżeli to możliwe na nested set
netvalue
teraz niesety na tym etapie to juz nie mozliwe
Pyton_000
No to pobieraj wszystkie kategorie hurtem, pakuj w cache i w skrypcie sobie to przeleć, będzie szybciej, łatwiej i mniej problemów.
netvalue
Python jest to co prawda jakies rozwiazanie ale ponad tych kategorii jest za duzo zeby tak je obrabiac
Pyton_000
Jaka baza takie rozwiązania. Zamiast kombinować w SQL szybciej i czytelniej zrobisz to w PHP

PS. A ile masz tych kategorii łącznie? 1k?
netvalue
około 110k
Pyton_000
Zawsze możesz pobrać tylko ID i parent_id i przemielić. a potem dociągasz dane opisowe dla danych ID
nospor
A zaglebienie do jakiego max poziomu dochodzi?
netvalue
Cytat(nospor @ 1.09.2014, 09:05:59 ) *
A zaglebienie do jakiego max poziomu dochodzi?


trzy poziomy max zawsze
nospor
To z racji, ze masz tak skaszanianioną te strukture, to obrabiaj to w php.

Najpierw pobierz ostatnią kategorie, potem w php pobierz jej rodzica, potem pobierz rodzica rodzica.. Będą to raptem 3 zapytania i będie to dzialalo w miare szybko.
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-2025 Invision Power Services, Inc.