Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Menu + Submenu
Forum PHP.pl > Forum > Przedszkole
andrzej_
Próbuję napisać skrypt wyświetlający menu z podkategoriami, dane idą z bazy.

Każdy wpis ma w tabeli dane typu MAIN (kategoria) oraz SUB (podkategoria) oznaczone numerami (0 lub 1 dla MAIN, 1-10 dla SUB) teraz chciałbym żeby to się jakoś wyświetlało, próbowałem użyć dwa razy while w ten sposób:

  1. $query="SELECT * FROM xx WHERE main = '1' ORDER BY position ASC";
  2. $result=mysql_query($query);
  3. $num = mysql_num_rows ($result);
  4.  
  5. if ($num > 0 ) {
  6. $i=0;
  7. while ($i < $num) {
  8. $value = mysql_result($result,$i,"value");
  9. $name = mysql_result($result,$i,"name");
  10. $position = mysql_result($result,$i,"position");
  11. $sub = mysql_result($result,$i,"sub");
  12. $id = mysql_result($result,$i,"id");
  13. $main = mysql_result($result,$i,"main");
  14. echo "
  15. <li><a href='$value'>$name [$id]</a>
  16. ";
  17. if ($main == 1) {
  18. $query="SELECT * FROM xx WHERE sub = $id ORDER BY position ASC";
  19. $result=mysql_query($query);
  20. $num = mysql_num_rows ($result);
  21.  
  22. if ($num > 0 ) {
  23. $y=0;
  24. while ($y < $num) {
  25. $value = mysql_result($result,$y,"value");
  26. $name = mysql_result($result,$y,"name");
  27. $position = mysql_result($result,$y,"position");
  28. $sub = mysql_result($result,$y,"sub");
  29. $id = mysql_result($result,$y,"id");
  30. $main = mysql_result($result,$y,"main");
  31. echo "<ul><li><a href='$value'>$name</a> [$id]</li></ul>";
  32. ++$y; };
  33.  
  34. };
  35.  
  36. }
  37.  
  38. echo "</li>";
  39. echo "end?";
  40.  
  41. ++$i; } } else { echo "The database is empty"; }?>
  42. </ul>


Ogólnie nie ma błędów, ale wyświetla się tylko do pierwszego wyniku z subami, dalej nic. Czy można tu użyć czegoś innego niż while? Domyślam się, że to średnie rozwiązanie, ale nic innego mi w tym momencie nie przychodzi do głowy.
Ghost_78
Sprawdz cos takiego
  1. $query=mysql_query("SELECT * FROM xx WHERE main = '1' ORDER BY position ASC");
  2. echo '<ul>';
  3. while ($row=mysql_fetch_assoc($query)){
  4. $id=$row[id];
  5. echo "<li><a href='$row[value]'>$row[name]</a>";
  6. $subQuery=mysql_query("SELECT * FROM xx WHERE sub = $id ORDER BY position ASC");
  7. if (mysql_num_rows($subQuery)){
  8. while ($subRow=mysql_fetch_assoc($subQuery)){
  9. echo "<ul><li><a href='$subRow[value]'>$subRow[name]</a> $subRow[id]</li></ul>";
  10. }
  11. }
  12. echo "</li>";
  13. }
  14. echo '</ul>';
markonix
  1. $value = mysql_result($result,$i,"value");
  2. $name = mysql_result($result,$i,"name");
  3. $position = mysql_result($result,$i,"position");
  4. $sub = mysql_result($result,$i,"sub");
  5. $id = mysql_result($result,$i,"id");
  6. $main = mysql_result($result,$i,"main");


Zamiast tego jedno mysql_fetch_row lub mysql_fetch_array i 1/2 kodu mniej.

Moja propozycja (koncepcja, nie kopiuj wklej).
  1. $result = mysql_query("SELECT * FROM xx WHERE main = '1' ORDER BY position ASC");
  2. while ($row = mysql_fetch_array($result) {
  3. echo $row['kategoria'];
  4. // coś tam związane z rozpoczęciem kategorii linków
  5. $result2 = mysql_query("SELECT * FROM xx WHERE sub = $row[id] ORDER BY position ASC");
  6. while ($row2 = mysql_fetch_array($result2) {
  7. echo $row2['link'];
  8. // coś tam związane z linkami już konkretnymi
  9. }
  10. // tu coś kończące kategorie
  11. }


Czyli pętla główna z kategoriami, a w niej druga pętla z konkretnymi linkami.
Zapytań tyle co kategorii więc można pomyśleć o lepszym rozwiązaniu (np. z GROUP w zapytaniu).

Edit:
Kolega Ghost_78 zaproponował mniejwięcej to samo (tylko więcej roboty za Ciebie odwalił winksmiley.jpg )
andrzej_
Obu panom dziękuje smile.gif. Działa tak jak chciałem. Bardzo przyjemny start na forum Ghost_78! Ogólnie wystarczyło by powiedzieć o mysql_fetch_assoc i też by starczyło smile.gif.
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.