Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] problem z tablica w tablicy
wcg
post 18.03.2010, 09:07:35
Post #1





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 21.07.2006

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


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?
Go to the top of the page
+Quote Post
nospor
post 18.03.2010, 09:19:48
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




$nazwa[] = array($show['id']);
niepotrzebnie powtarza array powiadasz? No sam mu dajesz array to ci powtarza smile.gif
tak ma byc:
$nazwa[] = $show['id'];


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
wcg
post 18.03.2010, 09:26:40
Post #3





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 21.07.2006

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


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
Go to the top of the page
+Quote Post
nospor
post 18.03.2010, 09:32:10
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
wcg
post 18.03.2010, 10:31:48
Post #5





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 21.07.2006

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


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?
Go to the top of the page
+Quote Post
nospor
post 18.03.2010, 10:34:35
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
wcg
post 18.03.2010, 11:31:41
Post #7





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 21.07.2006

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


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
Go to the top of the page
+Quote Post
nospor
post 18.03.2010, 11:39:47
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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: 29.06.2025 - 12:05