Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Динамический многоуровневый список
Форумы портала PHP.SU » » Работа с СУБД » Динамический многоуровневый список

Страниц (1): [1]
 

1. Slavenin - 21 Июня, 2011 - 18:36:57 - перейти к сообщению
Написал небольшой скриптик для формирования многоуровневого списка из БД. Хотелось бы услышать ваши комментарии по поводу написанного. Так как не раз замечал за собой привычку ходить сложными путями. Хм

дамп базы:
Спойлер (Отобразить)

сам скрипт
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $sql3 = "SELECT b.Level, a.name as child, ifnull(c.name, 0) as parent, a.URL as UCH, ifnull(c.URL, 0) as UPR FROM `pages` as a
  3. left join `linkLevels` as b
  4. on a.id = b.`IdPage`
  5. left join `pages` as c
  6. on b.IdParent = c.ID
  7. WHERE a.IdUser = 1 order by parent";
  8.  
  9.         $conn = mysql_connect('', '', '');
  10.         mysql_select_db('voyager');
  11.         $result = mysql_query($sql3, $conn);
  12.         mysql_close();
  13. //формируем массив страниц с зависимостями и уровнями
  14.         $arrPages = array();
  15.         while($row = mysql_fetch_array($result))
  16.         {
  17.                 $arrPages[$row['parent']][$row['Level']][] = $row['child'];
  18.         }
  19. //берем первый ключ
  20. $key = key($arrPages);
  21. //пока существуют значения
  22. while($arrPages[$key])
  23. {
  24.         if($key = key($arrPages))
  25.         {
  26.                 echo '<br/>уровень: ' .$key .'<br/>';
  27. //берем следующий ключ с уровнем массива
  28.                 if($keyL = key($arrPages[$key]))
  29.                 {
  30.                         echo 'cтепень вложенности: ' .$keyL .'<br/>';
  31.                         $i = 0;
  32. //вытаскиваем значения
  33.                         while($arrPages[$key][$keyL][$i])
  34.                         {
  35.                                 echo 'значение: ' .$arrPages[$key][$keyL][$i] .'<br/>';
  36.                                 $i++;
  37.                         }
  38.                 }
  39.         }
  40. //смещаем ключ в первом массиве
  41.         next($arrPages);
  42. }
  43. ?>
2. Slavenin - 23 Июня, 2011 - 18:58:04 - перейти к сообщению
хм, все настолько плохо?
3. Coder1994 - 24 Июня, 2011 - 10:37:28 - перейти к сообщению
Почему плохо?
Написал ты грамотно, но как-то действительно сложно)
P.S. используй mysqli (скорость выше)
4. EuGen - 24 Июня, 2011 - 10:50:22 - перейти к сообщению
Не очень ясна нужда в статическом списке просто.
Ну а по коду - читается трудно из-за назаний в стиле $sql3, $conn и подобное. Это, конечно, личное дело каждого, но как правило понятные названия упрощают восприятие кода. Это же относится и к sql-запросам (альясы таблиц в виде 'a', 'b' лучше не заводить вовсе)
5. Slavenin - 24 Июня, 2011 - 23:25:17 - перейти к сообщению
EuGen пишет:
Не очень ясна нужда в статическом списке просто.

ну это просто заготовка вывода из базы, на будущее, из которой можно сделать нормальный списокс нужным количеством уровней
EuGen пишет:
Ну а по коду - читается трудно из-за назаний в стиле $sql3, $conn и подобное

обычно я такие названия не использую, тут просто расслабился чет.
EuGen пишет:
(альясы таблиц в виде 'a', 'b' лучше не заводить вовсе)

мне так привычнее, хотя умом я понимаю что алиас должен нести смысловую нагрузку, но для меня a,b,c... ассоциируются с порядковым номером таблицы в запросе Улыбка
EuGen пишет:
Это, конечно, личное дело каждого

полностью согласен Улыбка

 

Powered by ExBB FM 1.0 RC1