Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql][smarty] Tworzenie kategorii i podkategorii na jednej tabeli
Forum PHP.pl > Forum > PHP
XP'ek
Witam mam bazę kategoria i teraz pola to wiadomo id, nazwa, podkategoria i jak to zapisać w kodzie by odpowiednio wykonać na zasadzie że baza ma wpisy

1, Komputery, 0
2, Laptopy, 1
3, Standardowe, 1
4, Asus, 2
5, Dell, 2
6, Asus YYY, 4
7, Asus XXX, 4

i złożyło mi to odpowiednio w listę kategorii jak to najłatwiej rozwiązać przy jednej pętli while?
d3ut3r
Chodzi Ci o wygenerowanie drzewa kategorii ? jeżeli tak to może Ci się przyda ten wpis:

http://blog-programisty.pl/php/drzewo-kate...ja-rekurencyjna
XP'ek
dokładnie drzewo kategorii na podstawie id nad kategorii

a innym sposobem jak to można rozwiązać ?
kulczycki
drzewo na podstawie parent (ip).

np.

Standardowe by było
id(1) parent(0) position(1) PC
id(2) parent(1.2) position(2) Laptopy
id(3) parent(1.2) position(3) Standardowe
id(4) parent(1.2) position(3) Niestandardowe.

Postion tylko dałem bo pamiętam że później łatwiej query budować. Position oznacza miejscu ID danej kategorii w parent.
  1. SELECT * FROM `bug_categories` WHERE CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(`parent`, '.', :position), '.', -1) AS UNSIGNED) = :catId


Pobiera listę subkategorii dla aktualnej kategorii. Później tylko przy wyświetlaniu musisz sprawdzić czy ostatnia pozycja w parent jest równa aktualnej pozycji - wtedy dajesz do wyświetlenia. Dużo bajerów można tak robić, jest szybsze o wiele od rekurencyjnej strukturze.

Ogólnie będziesz musiał pomyśleć co i jak, jak załapiesz o co chodzi sam zrozumiesz jak napisać wszystko. winksmiley.jpg

Dla przykładu ale już nie będę opisywał całego działania kodu ( a całej klasy Ci nie dam):
  1. $parent = explode('.', $row['parent']);
  2. $parent_last = count($parent) - 1;
  3. if($parent[$parent_last] == $catId)
  4. {
  5. $catSub[$row['id']] = $row;
  6. $catSub[$row['id']]['numSubCat'] = 0;
  7. $catSub[$row['id']]['tickets'] = $ticket_count;
  8. $catSub[$row['id']]['tickets_p'] = $ticket_p;
  9. }else{
  10. $cat[$id]['numSubCat']++;
  11. $cat[$id]['tickets'] += $ticket_count;
  12. $cat[$id]['tickets_p'] += $ticket_p;
  13. if(isset($catSub[$parent[$row['position']-2]]))
  14. {
  15. $catSub[$parent[$row['position']-2]]['numSubCat']++;
  16. $catSub[$parent[$row['position']-2]]['tickets'] += $ticket_count;
  17. $catSub[$parent[$row['position']-2]]['tickets_p'] += $ticket_p;
  18. }
  19. }
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.