Intereting Posts
Редактирование vbscript при циклическом перемещении по пути к папке – PHP SQLSTATE : Нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется очистить файлы сеанса php Исходный код PHP в файлах UTF-8; как правильно интерпретировать? strip изображения из get_the_content () удаляет теги <p> PHP: Предупреждение mcrypt_generic_init (): размер Iv неверен; длина: 12, необходимо: 8 Как передать выражение XPath как параметр XSL с помощью PHP? php array в url от json Paypal выражает «краткое описание заказа» php получает первую часть почтового индекса Каков наилучший способ остановить людей, взломавших таблицу рекордов на основе PHP в флеш-игре Как заставить PHP SOAP-клиент взаимодействовать с сервисом, работающим через SSL, с недопустимым сертификатом Что означает поставщик в структуре веб-файла? Как получить доступ к константе, определенной в дочернем классе, из функций родительского класса? PHP 5.4.0 – Зарегистрировать глобальные списки устарел

как получить иерархическое меню из mysql

У меня есть таблица с иерархическими меню, например

"id" "parent_id" "name" 1 0 menu 2 1 item1 3 2 item1_1 4 1 item2 5 4 item2_1 ... ... 

и у меня есть 100 пунктов меню здесь. Чтобы получить все элементы в массиве, я должен написать рекурсивную функцию, подобную этой

 getmenu function(parent_id = 1) { $items = mysql_query("SELECT id FROM table WHERE parent_id = " + parent_id); while ($item = msyql_Fetch_assoc($items)) { ...here I put them in array and call recursive function again to get sub items... getmenu($item['id']); } } 

но это выполняет 100 запросов. Это лучший способ сделать это, чтобы получить иерархические меню из базы данных? Это так много загружает mysql?

Solutions Collecting From Web of "как получить иерархическое меню из mysql"

 $stmt = "SELECT id, parent_id FROM table"; $items = Array(); $result = mysql_query($stmt); while ($line = msyql_Fetch_assoc($result)) { $items[] = $line; } $hierarchy = Array(); foreach($items as $item) { $parentID = empty($item['parent_id']) ? 0 : $item['parent_id']; if(!isset($hierarchy[$parentID])) { $hierarchy[$parentID] = Array(); } $hierarchy[$parentID][] = $item; } 

Уровень корня будет $hierarchy[0] . Ключи – это элементы, идентификаторы и значения – все прямые дети.

Взгляните на Nested Sets, если вы не возражаете против более сложного решения. Вложенные наборы имеют очень хорошую производительность SELECT и я предполагаю, что выбор здесь более важен.

С помощью Nested Sets сложные иерархические данные могут управляться очень модным и элегантным способом.