Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Dynamiczne menu - problem z zapytaniem.
Forum PHP.pl > Forum > Przedszkole
AniaR
Tworze cztero - poziomowe dynamiczne menu i mam taka strukture tabeli w ktorej trzymam te menu:

  1. CREATE TABLE `menu` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `id_fk_menu` int(11) DEFAULT NULL,
  4. `id_fk_podmenu1` int(11) DEFAULT NULL,
  5. `id_fk_podmenu2` int(11) DEFAULT NULL,
  6. `nazwa` varchar(200) NOT NULL,
  7. PRIMARY KEY (`id`),
  8. KEY `id_fk_podmenu1` (`id_fk_podmenu1`),
  9. KEY `id_fk_podmenu2` (`id_fk_podmenu2`),
  10. KEY `id_fk_menu` (`id_fk_menu`)
  11. ) ENGINE=InnoDB DEFAULT CHARSET=latin2 AUTO_INCREMENT=436 ;
  12.  
  13. ALTER TABLE `menu`
  14. ADD CONSTRAINT `menu_ibfk_1` FOREIGN KEY (`id_fk_menu`) REFERENCES `menu` (`id`),
  15. ADD CONSTRAINT `menu_ibfk_2` FOREIGN KEY (`id_fk_podmenu1`) REFERENCES `menu` (`id`),
  16. ADD CONSTRAINT `menu_ibfk_3` FOREIGN KEY (`id_fk_podmenu2`) REFERENCES `menu` (`id`);


Przykladowe wypelnienie tabeli danymi:
  1. INSERT INTO `menu` VALUES (1, NULL, NULL, NULL, 'menu_gl1');
  2. INSERT INTO `menu` VALUES (2, NULL, NULL, NULL, 'menu_gl2');
  3. INSERT INTO `menu` VALUES (3, NULL, NULL, NULL, 'menu_gl3i');
  4. INSERT INTO `menu` VALUES (4, NULL, NULL, NULL, 'menu_gl4');
  5. INSERT INTO `menu` VALUES (5, NULL, NULL, NULL, 'menu_gl5');
  6. INSERT INTO `menu` VALUES (6, NULL, NULL, NULL, 'menu_gl6');
  7.  
  8. INSERT INTO `menu` VALUES (7, 1, NULL, NULL, 'podmenu1');
  9. INSERT INTO `menu` VALUES (8, 1, NULL, NULL, 'podmenu2');
  10. INSERT INTO `menu` VALUES (9, 2, NULL, NULL, 'podmenu3');
  11. INSERT INTO `menu` VALUES (10, 3, NULL, NULL, 'podmenu4');
  12.  
  13. INSERT INTO `menu` VALUES (11, NULL, 7, NULL, 'podpodmenu1');
  14. INSERT INTO `menu` VALUES (12, NULL, 7, NULL, 'podpodmenu2');
  15. INSERT INTO `menu` VALUES (13, NULL, 8, NULL, 'podpodmenu3');
  16. INSERT INTO `menu` VALUES (14, NULL, 8, NULL, 'podpodmenu4');
  17. INSERT INTO `menu` VALUES (15, NULL, 9, NULL, 'podpodmenu5');
  18.  
  19. INSERT INTO `menu` VALUES (16, NULL, NULL, 11, 'podpodpodmenu1');
  20. INSERT INTO `menu` VALUES (17, NULL, NULL, 13, 'podpodpodmenu2');
  21. INSERT INTO `menu` VALUES (18, NULL, NULL, 13, 'podpodpodmenu3');
  22. INSERT INTO `menu` VALUES (19, NULL, NULL, 14, 'podpodpodmenu4');
  23. INSERT INTO `menu` VALUES (20, NULL, NULL, 14, 'podpodpodmenu5');



Dane chcialabym wyswietlnic w takiej formie:

menu_gl1

podmenu1
podpodmenu1
podpodpodmenu1

podpodmenu2

podmenu2
podpodmenu3
podpodpodmenu2
podpodpodmenu3

podpodmenu4
podpodpodmenu4
podpodpodmenu5

menu_gl2
podmenu3
podpodmenu5

menu_gl3
podmenu4

menu_gl4

menu_gl5



Potrafie wyswietlac dane w taki sposob ale jezeli sa one w oddzielnych tabelach. A jak moge to zrobic trzymajac wszytskie w jednej tabeli??
_olo_1984
Chyba niebardzo to można zrobić na strukturze tabeli jaką podałaś. Przykładowo jeżeli jest ostatni element o ID=20 to skąd wiesz, do jakiego menu i podpodmenu umieścić ? Może być kilka kombinacji, którą wybrać jak masz NULL ? osobiście uważam że pomysł chybiony, chyba że wypełnisz te nulle odpowiednimi wartościami. Było też na forum już kilka takich tematów, np tu . Pozdr
AniaR
A jednak znalazlam swietne rozwiazanie:))))
OTO one:

  1. $menu1 = mysql_query("select * from menu WHERE id_fk_menu is null AND id_fk_podmenu1 is null AND id_fk_podmenu2 is null order by id");
  2. while ($line = mysql_fetch_array($menu1))
  3. {
  4. $id1= $line['id'];
  5. echo "<dt>".$line['nazwa']."</dt>";
  6. echo "<dd><dl>";
  7.  
  8. $menu2 = mysql_query("select * from menu WHERE id_fk_menu= $id1 AND id_fk_podmenu1 is null AND id_fk_podmenu2 is null order by id");
  9. while ( $line2 = mysql_fetch_array($menu2))
  10. {
  11. $id2= $line2['id'];
  12. echo "<dt>".$line2['nazwa']."</dt>";
  13. echo "<dd><dl>";
  14.  
  15. $menu3 = mysql_query("select * from menu WHERE id_fk_menu is null AND id_fk_podmenu1= $id2 AND id_fk_podmenu2 is null order by id");
  16. while ( $line3 = mysql_fetch_array($menu3))
  17. {
  18. $id3= $line3['id'];
  19. echo "<dt>".$line3['nazwa']."</dt>";
  20.  
  21. $menu4 = mysql_query("select * from menu WHERE id_fk_menu is null AND id_fk_podmenu1 is null AND id_fk_podmenu2 = $id3 order by id");
  22. while ( $line4 = mysql_fetch_array($menu4))
  23. {
  24.  
  25. echo "<dd>".$line4['nazwa']."</dd>";
  26.  
  27. }
  28. }
  29. echo "</dd></dl>";
  30.  
  31. }
  32. echo "</dd></dl>";
  33. }
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.