Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL]zapytanie, drzewo
-Gość-
post
Post #1





Goście







Witam

Mam w bazie danych liste kategorii i subkategorii. Chcialbym pobrac wszystko za pomoca jednego zapytania posortowane w odpowiedni sposob.

w bazie wyglada to tak:

  1. id parent_id name
  2. 1 null papier
  3. 2 null folia
  4. 3 null filc
  5. 4 1 gruby
  6. 5 2 zwykła
  7. 6 2 bąbelkowa
  8. 7 1 cieńki
  9. 8 1 samoprzylepny
  10. 9 3 200g
  11. 10 1 teksturowany


czyli powinno zostac posortowane w ten sposob
  1. papier
  2. cieńki
  3. gruby
  4. samoprzylepny
  5. teksturowany
  6. filc
  7. 200g
  8. folia
  9. zwykła
  10. bąbelkowa


Moglbym na poczatek pobrac wszystkie elementy w ktorych parent==null, pozniej przejechac je po kolei i popobierac ich dzieci. Ale moze da sie jakos bardziej w SQL, mniej w PHP?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
--Gosc134--
post
Post #2





Goście







Mam, Znalazłem prosty i skuteczny kod. Oto chodziło.

Tylko mam pewne obawy co do global $data, $index;

Czy to jest bezpieczne ?
Jak można to usunąć by wszystko działało ?

  1. <?php
  2. $data = array();
  3. $index = array();
  4. $query = mysql_query("SELECT * FROM kategory ORDER BY title");
  5. while ($row = mysql_fetch_assoc($query)) {
  6. $id = $row["id"];
  7. $parent_id = $row["parents"] === '' ? "" : $row["parents"];
  8. $data[$id] = $row;
  9. $index[$parent_id][] = $id;
  10. }
  11.  
  12. function display_child_nodes($parent_id, $level)
  13. {
  14. global $data, $index;
  15. $parent_id = $parent_id === '' ? "" : $parent_id;
  16. if (isset($index[$parent_id])) {
  17. foreach ($index[$parent_id] as $id) {
  18. echo str_repeat("-", $level) . $data[$id]["title"] . "<br/>";
  19. display_child_nodes($id, $level + 1);
  20. }
  21. }
  22. }
  23. display_child_nodes(NULL, 0);
  24. ?>
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: 8.10.2025 - 07:38