Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] problem z tablica w tablicy
Forum PHP.pl > Forum > PHP
wcg
Tworzę menu i mam problem z poprawnym skonstruowaniem tablicy w której znajduja się kategorie i podtakegorie. Chciałbym aby tablica wyświetlała sie w taki sposób:
  1. (
  2. [0] => 1
  3. [1] => 2
  4. [2] => Array
  5. (
  6. [0] => 7
  7. [1] => 8
  8. [2] => 24
  9. )
  10. [4] => 3
  11. [5] => Array
  12. (
  13. [0] => 9
  14. [1] => 10
  15. [2] => 11
  16. [3] => 12
  17. )
  18. [6] => Array
  19. (
  20. [0] => 13
  21. )
  22.  
  23. [7] => 4
  24. [8] => 5
  25. [9] => 6
  26. )


mój skrypt generuje ją podobny sposób ale niepotrzebnie powtarza w podkateoriach za kazdym razem array
  1. (
  2. [0] => 1
  3. [1] => 2
  4. [2] => Array
  5. (
  6. [0] => 7
  7. )
  8.  
  9. [3] => Array
  10. (
  11. [0] => 8
  12. )
  13.  
  14. [4] => Array
  15. (
  16. [0] => 24
  17. )
  18.  
  19. [5] => 3
  20. [6] => Array
  21. (
  22. [0] => 9
  23. )
  24.  
  25. [7] => Array
  26. (
  27. [0] => 10
  28. )
  29.  
  30. [8] => Array
  31. (
  32. [0] => 11
  33. )
  34.  
  35. [9] => Array
  36. (
  37. [0] => 12
  38. )
  39.  
  40. [10] => Array
  41. (
  42. [0] => 13
  43. )
  44.  
  45. [11] => 4
  46. [12] => 5
  47. [13] => 6
  48. )
  49.  
  50.  

a oto skrypt

  1. $nazwa= array();
  2. $wynik = mysql_query("SELECT * FROM menu WHERE sub1='0'");
  3. while ($show = mysql_fetch_array($wynik)) {
  4. $id = $show['id'];
  5. $nazwa[] = $show['id'];
  6.  
  7. $wynik_1 = mysql_query("SELECT * FROM menu WHERE sub1='$id'");
  8.  
  9. while ($show = mysql_fetch_array($wynik_1)) {
  10. $nazwa[] = array($show['id']);
  11. }
  12. }


Czy ktos moze mi pomóc w rozwiązaniu tego problemu, bo męczę się już tym kilka dni?
nospor
$nazwa[] = array($show['id']);
niepotrzebnie powtarza array powiadasz? No sam mu dajesz array to ci powtarza smile.gif
tak ma byc:
$nazwa[] = $show['id'];
wcg
Jak mu nie dam array to zostaje podkategoria wrzucona do kategorii

  1. (
  2. [0] => 1
  3. [1] => 2
  4. [2] => 7
  5. [3] => 8
  6. [4] => 24
  7. [5] => 3
  8. [6] => 9
  9. [7] => 10
  10. [8] => 11
  11. [9] => 12
  12. [10] => 13
  13. [11] => 4
  14. [12] => 5
  15. [13] => 6
  16. )
  17.  

Array dodatkowy powinien pewnie być ale w powinien w podkategorii wystapic raz a nie przy każdym razie
nospor
wybacz, nie załapałem całego kontekstu
swoją droga bardzo dziwną robisz strukture. pozwol ze ją troche poprawie
  1. $nazwa= array();
  2. $wynik = mysql_query("SELECT * FROM menu WHERE sub1='0'");
  3. while ($show = mysql_fetch_array($wynik)) {
  4. $id = $show['id'];
  5. $nazwa[$id] = array(
  6. 'jakiesdane' =>'jesli masz ich wiecej a jak nie masz to wywal ten index',
  7. 'sub' => array()
  8. );
  9.  
  10. $wynik_1 = mysql_query("SELECT * FROM menu WHERE sub1='$id'");
  11.  
  12. while ($show = mysql_fetch_array($wynik_1)) {
  13. $nazwa[$id]['sub'][] = $show['id'];
  14. }
  15. }

Kolejna sprawa to to, ze robisz petle w petli a w tych petlach robisz zapytania.... bardzo nieoptymalne.
Moze to ci cos pomoze
http://nospor.pl/grupowanie-wynikow-n35.html
wcg
Wiem ze używanie pętli w pętli jest błedem.
Na Twojej stronie jest przykład nr 1 o takie coś mi chodzi, ale żeby dane były w jednej tablicy, bo to spowoduje nie ograniczoną ilość gałęzi. W moim przypadku sub1 określa id kategorii nadrzędnej, czyli powstanie drzewo.
Czy da się Twoj przykład nr 1 zastosować do jednej tabeli?
nospor
Troche nie za bardzo zrozumialem... pozwol, ze odpowiem wg. tego co sie domyslam o co pytasz smile.gif
Moze byc jedna tabela. Poprzez LEFT JOIN łącz się spowrotem do tej samej tabeli a nie do drugiej.
A poprzez WHERE ogranicz poziom pierwszej tabli to poziomu zerowego (sub=0) - wszystko bedzie grac i nie bedzie zadnej nieskonczonej petli
wcg
Jest tak jak napisałeś
id=1 & sub1 = 0 oznacza kategorię głowną
id=2 & sub1 = 0 oznacza kategorię głowną
id=3 & sub1 = 1 oznacza ze jest to podkategoria przyporządkowana do id = 1
id=4 & sub1 = 3 oznacza ze jest to podkategoria przporządkowana do podkategorii o id=3
itd.
pewnie wydaje się to logiczne co powyzej, ale dalej nie wiem jak zapytać baze zeby dostać taka tablice
nospor
Modyfikacje mojego zapytania ze strony:
  1. $sql = 'select subm.id submid,m.id mid from menu m '.
  2. 'left join menu subm on subm.sub1 = m.id '.
  3. 'where m.sub1=0 '.
  4. 'order by m.id asc, subm.id asc';

tutaj CATEGORY to m, a PRODUCT to subm
Uzywalem tylko id bo nie wiem jakie ty tam jeszcze masz pola.
Poprawke kodu php pozostawiam juz tobie.
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.