Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Wyświetlanie drzewka kategorii i subkategorii
Forum PHP.pl > Forum > Przedszkole
Manfred
Witam,

Mam takie tabele:

tabela categories
  1. cat_id cat_name
  2. 1 Kategoria1
  3. 2 Kategoria2


tabela subcategories
  1. subcat_id subcat_name subcat_cat_id
  2. 1 Subkategoria1 1
  3. 2 Subkategoria2 2
  4. 3 Subkategoria3 1
  5. 4 Subkategoria4 2


Potrzebuję wyświetlić je w taki sposób:

Kategoria1
- Subkategoria1
- Subkategoria3
Kategoria2
- Subkategoria2
- Subkategoria4

Szczerze powiem, że nie mam pojęcia jak się do tego zabrać. Domyślam się tylko, że trzeba użyć pętli for(), ale nie wiem jak to skleić.

Z góry dziękuje za pomoc.
Woytek950
Nie jestem expertem tongue.gif ale gdym miał wykonać taki skrypt zrobił bym to tak:
1. sprawdz ile jest kategorii
2. wykonaj tyle razy pętlę z wypisywaniem kategorii
3. w poprzedniej pętli sprawdzic ile jest podkategorii jezeli jest, pętla wyświetlająca subkategorie

moze źle rozpisałem, jeżeli tak niech ktoś poprawi
Rysh
Posortuj wyniki po subcat_cat_id a następnie, jeśli zmieni się wartość subcat_cat_id wstawiasz kategorię.
piotrooo89
  1. SELECT sc. * , c. *
  2. FROM categories c
  3. LEFT JOIN subcategories sc ON sc.subcat_cat_id = c.cat_id


no teraz obsługa po stronie PHP, ale to już Cię naprowadzali.
Manfred
Ok, mam taki kod:
  1. $select_cat = 'SELECT * FROM categories';
  2. $select_cat_res = mysql_query($select_cat)
  3.  
  4. $select_subcat = 'SELECT * FROM subcategories'
  5. $select_subcat_res = mysql_query($select_subcat)
  6.  
  7.  
  8. function sql_results($sql, $echo = 0, $errNo = "")
  9. {
  10. if ($echo == 0) {
  11. switch (substr($sql, 0, stripos($sql, " "))) {
  12. case 'SELECT': {
  13. $sql_q = mysql_query($sql)or die($errNo . "<br />\n" . $sql . "<br>\n" . mysql_error());
  14. while ($row = mysql_fetch_assoc($sql_q)) {
  15. extract ($row);
  16. $ro[] = $row;
  17. }
  18. return $ro;
  19. }
  20.  
  21. default: {
  22. $sql_q = mysql_query($sql)or die($errNo . "<br />\n" . $sql . "<br>\n" . mysql_error());
  23. break;
  24. }
  25. }
  26. } elseif ($echo == 1) {
  27. echo $sql;
  28. }
  29. }
  30.  
  31. print_r(sql_results($select_cat)); // pomocnicze
  32. $tabcat = sql_results($select_cat);
  33. echo "<br />";
  34.  
  35. print_r(sql_results($select_subcat)); // pomocnicze
  36. $tabsubcat = sql_results($select_subcat);
  37. echo "<br />";
  38.  
  39.  
  40. $ilecat = count($tabcat);
  41. $ilesubcat = count($tabsubcat);
  42.  
  43.  
  44. for ($i=0; $i <$ilecat; $i++)
  45. {
  46. echo $tabcat[$i][cat_name].'<br />';
  47. }
  48.  


i to mi wyświetla:
Kategoria1
Kategoria2

W jaki sposób dodać tam podkategorie? Próbowałem tam pakować kolejną pętle w pętli, ale się sypało.

Pawel_W
zastosuj to co napisał piotrooo89, będzie Ci o wiele łatwiej...
Manfred
Mam już działający kod.

Gdyby ktoś potrzebował:

  1. $select_cat = 'SELECT * FROM categories';
  2.  
  3. function sql_results($sql, $echo = 0, $errNo = "")
  4. {
  5. if ($echo == 0) {
  6. switch (substr($sql, 0, stripos($sql, " "))) {
  7. case 'SELECT': {
  8. $sql_q = mysql_query($sql)or die($errNo . "<br />\n" . $sql . "<br>\n" . mysql_error());
  9. while ($row = mysql_fetch_assoc($sql_q)) {
  10. extract ($row);
  11. $ro[] = $row;
  12. }
  13. return $ro;
  14. }
  15.  
  16. default: {
  17. $sql_q = mysql_query($sql)or die($errNo . "<br />\n" . $sql . "<br>\n" . mysql_error());
  18. break;
  19. }
  20. }
  21. } elseif ($echo == 1) {
  22. echo $sql;
  23. }
  24.  
  25. }
  26.  
  27. $cat_tab = sql_results($select_cat);
  28.  
  29.  
  30. for ($i = 0; $i < count($cat_tab); $i++) {
  31. $subcat_name = sql_results('SELECT * FROM subcategories WHERE subcat_cat_id = "' . $cat_tab[$i]['cat_id'] . '"');
  32.  
  33. echo $cat_tab[$i]['cat_name'] . '<br />';
  34.  
  35. for ($a = 0; $a < count($subcat_name); $a++) {
  36. echo $subcat_name[$a]['subcat_name'] . '<br />';
  37. }
  38. echo "<br />";
  39. }
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.