За последние 24 часа нас посетили 17589 программистов и 1611 роботов. Сейчас ищут 1664 программиста ...

Помогите з запросом для меню з подменюшками

Тема в разделе "MySQL", создана пользователем MrVOVA, 18 мар 2009.

  1. MrVOVA

    MrVOVA Активный пользователь

    С нами с:
    14 июн 2008
    Сообщения:
    31
    Симпатии:
    0
    Вот начел делать меню по собственний софтовик, столкнулса с проблемой подкатегорий....
    суть такая, с поля menu витягиваю категории, с menu_sub подкатегории, подскажите в чом я зделал ошибку? :( :oops:

    PHP:
    1. <?php
    2. $data = mysql_query ("SELECT * FROM menu",$con);
    3. $gg = mysql_fetch_assoc ($data);
    4. $dataa = mysql_query ("SELECT * FROM menu_sub WHERE `key` = '".$gg['keys']."'",$con);
    5. print '
    6. <div id="container">
    7. <ul id="nav">';
    8. while ($res = mysql_fetch_assoc ($data)){
    9. print '<li><a href="'.$res['href'].'">'.$res['name'].'</a>';
    10. while ($ress = mysql_fetch_assoc ($dataa)){
    11. print '<ul><li><a href="'.$ress['link'].'">'.$ress['name_sub'].'</a></li></ul>';}
    12. print '</li>';}
    13. print '</ul></div>'
    14. ?>
    вот таблички
    Код (Text):
    1.  
    2. MENU:
    3. id|name|href|keys|
    4. 1|index|#||
    5. 2|main|main.php|index|
    6. MENU_SUB:
    7. ids|name_sub|link|key|
    8. 1|first|#|index|
     
  2. Alost

    Alost Активный пользователь

    С нами с:
    7 фев 2009
    Сообщения:
    335
    Симпатии:
    0
    Адрес:
    Город вокруг невы
    Код (Text):
    1.  
    2. MENU:
    3. id|name|href|keys|
    4. 1|index|#||
    5. 2|main|main.php|index|
    6. MENU_SUB:
    7. ids|name_sub|link|key|
    8. 1|first|#|index|
    [/quote]

    Не выкладывай так...непонятно нефига уже на 4х столбиках.

    Ошибка первоначально в логике.

    Как должно работать в теории:

    1.Делаем выборку по категориям.
    2.Пока есть категории начинаем их выводить.
    3.После вывода каждой категории, делаем выборку подкатегорий для текущей категории.
    4.Выводим все подкатегории.
     
  3. MrVOVA

    MrVOVA Активный пользователь

    С нами с:
    14 июн 2008
    Сообщения:
    31
    Симпатии:
    0
    твоей логики непанимаю.....напиши кодом....пойму....
     
  4. Alost

    Alost Активный пользователь

    С нами с:
    7 фев 2009
    Сообщения:
    335
    Симпатии:
    0
    Адрес:
    Город вокруг невы
    PHP:
    1.  
    2. $Cat = new Category;
    3.  
    4. while ($cat==getNextCategory())
    5.   {
    6.      $Cat->renderCurentCategory($catTemplate);
    7.      $Cat->renderAllSubCategory($subCatTemplate);
    8.   }
    9.  
    Таже логика...только в коде, в коде который не будет работать без описания класса)
     
  5. MrVOVA

    MrVOVA Активный пользователь

    С нами с:
    14 июн 2008
    Сообщения:
    31
    Симпатии:
    0
    иии дауж, я полний болван...сорь, но прокоментируй, мну 16 лет, оч тежело ето......
     
  6. Alost

    Alost Активный пользователь

    С нами с:
    7 фев 2009
    Сообщения:
    335
    Симпатии:
    0
    Адрес:
    Город вокруг невы
    PHP:
    1.  
    2. <?php
    3. $data = mysql_query ("SELECT * FROM menu",$con);
    4.  
    5. print '
    6. <div id="container">
    7. <ul id="nav">';
    8.  
    9. while ($res = mysql_fetch_assoc ($data))
    10. {
    11.   print '<li><a href="'.$res['href'].'">'.$res['name'].'</a>';
    12.   $dataa = mysql_query ("SELECT * FROM menu_sub WHERE `key` = '".$res['keys']."'",$con);
    13.   while ($ress = mysql_fetch_assoc ($dataa))
    14.   {
    15.     print '<ul><li><a href="'.$ress['link'].'">'.$ress['name_sub'].'</a></li></ul>';
    16.   }
    17.   print '</li>';
    18. }
    19.  print '</ul></div>'
    20.  
    21. ?>
    22.  
    23.  
    Поидее так должно заработотать.
     
  7. MrVOVA

    MrVOVA Активный пользователь

    С нами с:
    14 июн 2008
    Сообщения:
    31
    Симпатии:
    0
    фактически верно, но оно виводит только 1 запись...тобто если есть 2 субкатегории оно виводит 1, у меня в ходе експерементов так же делало( наверное цикл прокручивает только 1 раз потому што он в прокручиваетса в цикле, ет мое мнение:( как би ето зделать :(
     
  8. Alost

    Alost Активный пользователь

    С нами с:
    7 фев 2009
    Сообщения:
    335
    Симпатии:
    0
    Адрес:
    Город вокруг невы
    Ответ ищи в базе, ошибка скорей всего там..не правильно заданы подкатегории
     
  9. MrVOVA

    MrVOVA Активный пользователь

    С нами с:
    14 июн 2008
    Сообщения:
    31
    Симпатии:
    0
    key одинакови, должно б працевать, вот трабл :(
     
  10. MrVOVA

    MrVOVA Активный пользователь

    С нами с:
    14 июн 2008
    Сообщения:
    31
    Симпатии:
    0
    всьотаки нашеб багу в html :)))

    HTML:
    1.  
    2. <?php require_once "core.php"; ?>
    3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    4. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
    5.     <meta http-equiv="content-type" content="text/html; charset=windows-1251" />
    6.     <title>Выпадающее меню CSS</title>
    7.     <link rel="stylesheet" href="/css/examples.css" type="text/css" />
    8.  
    9. <style type="text/css">
    10.  
    11. #nav, #nav ul {
    12.   list-style: none;
    13.   margin: 0;
    14.   padding: 0;
    15.   border: 1px solid #000;
    16.   background: #515151;
    17.   float: left;
    18.   width: 100%;
    19. }
    20. #nav li {
    21.   float: left;
    22.   position: relative;
    23.   background: #515151;
    24.   back\ground: none;
    25. }
    26.  
    27. #nav a {
    28.   color: #fff;
    29.   text-decoration: none;
    30.   display: block;
    31.   width: 120px;
    32.   padding: 4px 10px;
    33.   background: url(dot.png) repeat-y right;
    34. }
    35. #nav a:hover {
    36.   color: #000;
    37.   background: #ccc;
    38. }
    39. #nav li:hover,
    40. #nav li.jshover {
    41.   background: #333;
    42. }
    43.  
    44. #nav li ul {
    45.   display: none;
    46.   position: absolute;
    47.   background: url(fone-tr.png);
    48.   padding: 8px 0;
    49.   width: 138px;
    50. }
    51. #nav li li a {
    52.   width: 118px;
    53.   background: none;
    54. }
    55. #nav li:hover ul,
    56. #nav li.jshover ul {
    57.   display: block;
    58. }
    59.  
    60. #nav li:hover li ul,
    61. #nav li.jshover li ul {
    62.   display: none;
    63.   width: 138px;
    64.   top: -9px;
    65.   left: 118px;
    66.   lef\t: 133px;
    67. }
    68. #nav li:hover li:hover ul,
    69. #nav li.jshover li.jshover ul {
    70.   display: block;
    71. }
    72.  
    73.  
    74. <script type="text/javascript"><!--//--><![CDATA[//><!--
    75.     jsHover = function() {
    76.         var hEls = document.getElementById("nav").getElementsByTagName("LI");
    77.         for (var i=0, len=hEls.length; i<len; i++) {
    78.             hEls[i].onmouseover=function() { this.className+=" jshover"; }
    79.             hEls[i].onmouseout=function() { this.className=this.className.replace(" jshover", ""); }
    80.         }
    81.     }
    82.     if (window.attachEvent && navigator.userAgent.indexOf("Opera")==-1) window.attachEvent("onload", jsHover);
    83. //--><!]]></script>
    84.  
    85. </head>
    86.  
    87. <?php
    88. $data = mysql_query ("SELECT * FROM menu",$con);
    89.  
    90. print '
    91. <div id="container">
    92.   <ul id="nav">';
    93.  
    94.  while ($res = mysql_fetch_assoc ($data)) {
    95.    print '<li><a href="'.$res['href'].'">'.$res['name'].'</a>';
    96.    $dataa = mysql_query ("SELECT * FROM menu_sub WHERE `key` = '".$res['keys']."'",$con);
    97.  print '<ul>';  
    98.    while ($ress = mysql_fetch_assoc ($dataa)) {
    99.      print '<li><a href="'.$ress['link'].'">'.$ress['name_sub'].'</a></li>';}
    100.    
    101.    print '</ul></li>';}
    102.   print '</ul></div>'
    103. ?>
    104. </ul>
    105. </div>
    106. </body>
    107. </html>
     
  11. Alost

    Alost Активный пользователь

    С нами с:
    7 фев 2009
    Сообщения:
    335
    Симпатии:
    0
    Адрес:
    Город вокруг невы
    Дамп базы для меню и подменю
    PHP:
    1.  
    2. CREATE TABLE IF NOT EXISTS `cats` (
    3.   `id` int(11) NOT NULL auto_increment,
    4.   `name` varchar(32) character set cp1251 collate cp1251_bin NOT NULL default '',
    5.   `href` varchar(128) character set cp1251 collate cp1251_bin NOT NULL default '',
    6.   PRIMARY KEY  (`id`)
    7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
    8.  
    9. --
    10. -- Dumping data for table `cats`
    11. --
    12.  
    13. INSERT INTO `cats` (`id`, `name`, `href`) VALUES
    14. (1, 'Основное', '/main'),
    15. (2, 'Дополнительное', '/aditional'),
    16. (3, 'Не важное', '/others');
    17.  
    18. -- --------------------------------------------------------
    19.  
    20. --
    21. -- Table structure for table `sub_cats`
    22. --
    23.  
    24. CREATE TABLE IF NOT EXISTS `sub_cats` (
    25.   `CatId` int(11) NOT NULL default '0',
    26.   `Name` varchar(32) character set cp1251 collate cp1251_bin NOT NULL default '',
    27.   `href` varchar(128) character set cp1251 collate cp1251_bin NOT NULL default ''
    28. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    29.  
    30. --
    31. -- Dumping data for table `sub_cats`
    32. --
    33.  
    34. INSERT INTO `sub_cats` (`CatId`, `Name`, `href`) VALUES
    35. (1, 'первая в главном', '/main/one'),
    36. (1, 'Вторая в главном', '/main/two'),
    37. (1, 'Третья в главном', '/main/three'),
    38. (2, 'первое в дополнительном', '/aditional/first'),
    39. (2, 'Второе  вдополнительном', '/aditional/second');
    PHP:
    1.  
    2.  
    3. Рабочий код.
    4. <?php
    5. mysql_connect('localhost','root','123');
    6. mysql_query("SET NAMES 'cp1251'");
    7. $data = mysql_query ("SELECT * FROM cats");
    8. echo mysql_error();
    9.   print '
    10.  <div id="container">
    11.   <ul id="nav">';
    12.  
    13.   while ($res = mysql_fetch_assoc ($data))
    14.     {
    15.         print '<li><a href="'.$res['href'].'">'.$res['name'].'</a>';
    16.         $dataa = mysql_query ("SELECT * FROM sub_cats WHERE `CatId` = '".$res['id']."'");
    17.         while ($ress = mysql_fetch_assoc ($dataa))
    18.           {
    19.               print '<ul><li><a href="'.$ress['href'].'">'.$ress['Name'].'</a></li></ul>';
    20.             }
    21.         print '</li>';
    22.       }
    23.    print '</ul></div>'
    24.  
    25. ?>
    26.  
     
  12. MrVOVA

    MrVOVA Активный пользователь

    С нами с:
    14 июн 2008
    Сообщения:
    31
    Симпатии:
    0
    всё зделал, результат можно просмотреть здесь