Intereting Posts
Проверка подлинности формы CakePHP для обычных запросов с базовой аутентификацией для JSON Необычный результат при слиянии двух прозрачных изображений в php Разбирайте все ссылки, которые содержат определенное слово в теге «href» Изменение иностранных символов в их нормальный эквивалент Потеря переменной сеанса после вызова ajax PHP запускает цикл и скрипт одновременно Как установить модуль bcmath? Как загружать ресурсы сайта независимо от пути родительского файла PHP и XML – Как сгенерировать запрос на мыло в PHP из этого XML? Можете ли вы создать миграцию из существующей таблицы с помощью Doctrine? PHP Datetime не может преобразовать отрицательную дату ISO8601 PDO :: __ construct (): сервер отправил charset (255), неизвестный клиенту. Пожалуйста, сообщите разработчикам Есть ли лучший способ разработки zend_forms вместо использования декораторов? Динамически генерировать классы во время выполнения в php? Динамические платежи с полосой

Проблема MPTT (измененный обход дерева предзаказов) в PHP

Мой первый пост здесь! Похоже, это место для мудрых;)

В настоящее время я нахожусь в центре тестирования с первой попыткой попробовать подход MPTT (измененный порядок предпросмотра дерева) для хранения данных в моей базе данных Mysql с помощью PHP.

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

Это может привести к получению категорий Saab и Chrysler из приведенного ниже изображения, если родительский указатель будет называться «Bilar». (Это означает, что автомобили на шведском языке, если это не ваша самая сильная сторона;))

Как я не могу опубликовать изображения, вот ссылка на блок-схему: http://www.phpsidan.nu/files/mptt/mptt1.png

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

Есть ли лучший способ сделать это и, надеюсь, только с использованием одного запроса?

Большое спасибо!

    Я уверен, что это можно было бы оптимизировать, однако при условии, что у вас есть столбцы «имя», «lft» и «rgt», следующее даст вам 2-го уровня братьев и сестер «Билар».

    SELECT node.name, node.lft AS sort, (COUNT(parent.name) - (sub_tree.depth + 1)) AS depth FROM car AS node, car AS parent, car AS sub_parent, ( SELECT node.name, (COUNT(parent.name) - 1) AS depth FROM car AS node, car AS parent WHERE node.lft BETWEEN parent.lft AND parent.rgt AND node.name = "Bilar" GROUP BY node.name ORDER BY node.lft) AS sub_tree WHERE node.lft BETWEEN parent.lft AND parent.rgt AND node.lft BETWEEN sub_parent.lft AND sub_parent.rgt AND sub_parent.name = sub_tree.name GROUP BY node.name HAVING depth <= 2 ORDER BY node.lft 

    http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ содержит информацию и примеры запросов на вложенных множествах

    получение непосредственных детей в NS является сложным, поэтому некоторые люди предпочитают хранить явный parent_id вместе с «левыми» и «правильными» указателями.