Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php][mysql][smarty] Tworzenie kategorii i podkategorii na jednej tabeli
XP'ek
post 22.01.2011, 23:16:54
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
d3ut3r
post 23.01.2011, 01:40:46
Post #2





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

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


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


--------------------
http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
Go to the top of the page
+Quote Post
XP'ek
post 27.01.2011, 18:42:37
Post #3





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

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


dokładnie drzewo kategorii na podstawie id nad kategorii

a innym sposobem jak to można rozwiązać ?
Go to the top of the page
+Quote Post
kulczycki
post 27.01.2011, 18:58:57
Post #4





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. 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

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 Wersja Lo-Fi Aktualny czas: 19.04.2024 - 14:13