Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php][mysql][smarty] Tworzenie kategorii i podkategorii na jednej tabeli
XP'ek
post
Post #1





Grupa: Zarejestrowani
Postów: 263
Pomógł: 9
Dołączył: 3.05.2009
Skąd: Wroc

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


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
kulczycki
post
Post #2





Grupa: Zarejestrowani
Postów: 76
Pomógł: 8
Dołączył: 10.11.2010
Skąd: Polska,Katowice

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


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. (IMG:style_emoticons/default/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. }


Ten post edytował kulczycki 27.01.2011, 19:01:19
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 7.10.2025 - 06:09