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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Динамический многоуровневый список

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: силами php+mysql(оцените)
Slavenin
Отправлено: 21 Июня, 2011 - 18:36:57
Post Id



Посетитель


Покинул форум
Сообщений всего: 285
Дата рег-ции: Май 2010  
Откуда: Тверь


Помог: 4 раз(а)




Написал небольшой скриптик для формирования многоуровневого списка из БД. Хотелось бы услышать ваши комментарии по поводу написанного. Так как не раз замечал за собой привычку ходить сложными путями. Хм

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

сам скрипт
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. ?>
 
 Top
Slavenin
Отправлено: 23 Июня, 2011 - 18:58:04
Post Id



Посетитель


Покинул форум
Сообщений всего: 285
Дата рег-ции: Май 2010  
Откуда: Тверь


Помог: 4 раз(а)




хм, все настолько плохо?
 
 Top
Coder1994
Отправлено: 24 Июня, 2011 - 10:37:28
Post Id


Частый гость


Покинул форум
Сообщений всего: 213
Дата рег-ции: Май 2010  
Откуда: Россия, Ростов-на-Дону


Помог: 3 раз(а)




Почему плохо?
Написал ты грамотно, но как-то действительно сложно)
P.S. используй mysqli (скорость выше)
 
 Top
EuGen Администратор
Отправлено: 24 Июня, 2011 - 10:50:22
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Не очень ясна нужда в статическом списке просто.
Ну а по коду - читается трудно из-за назаний в стиле $sql3, $conn и подобное. Это, конечно, личное дело каждого, но как правило понятные названия упрощают восприятие кода. Это же относится и к sql-запросам (альясы таблиц в виде 'a', 'b' лучше не заводить вовсе)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Slavenin
Отправлено: 24 Июня, 2011 - 23:25:17
Post Id



Посетитель


Покинул форум
Сообщений всего: 285
Дата рег-ции: Май 2010  
Откуда: Тверь


Помог: 4 раз(а)




EuGen пишет:
Не очень ясна нужда в статическом списке просто.

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

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

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

полностью согласен Улыбка
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB