Показать сообщение отдельно
  #7 (permalink)  
Старый 21.11.2016, 20:16
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от St.
А можно как-то к PHP подключить свой модуль, ну скажем написаный на ассемблере?
На Ассемблере? Ну тогда уж сразу набить код на перфокарте

РНР язык высокого уровня, но для каждой платформы свой интерпретатор. А Ассемблер вообще привязан к системе команд процессора. Расширения для РНР пишут на С.

Рекурсия для выборки дерева, это множество запросов к базе и никаким Ассемблером этого не исправить.

Но можно обойтись единственным запросом, но с условием, что на глубину вложения есть ограничение. Если глубина вложения небольшая (например меню сайта, где большая глубина вложения вряд ли уместна), то формируется запрос, который прост по сути - в запросе подключается таблица (в которой хранится дерево) числом равным максимальному уровню вложения минус 1, по условию равенства parent ее записей id предыдущего подключения:

SELECT label1.fields, label2.fields, label3.fields, ... FROM table label1
LEFT JOIN table label2
ON label2.parent = label1.id
LEFT JOIN table label3
ON label3.parent = label2.id
.....
WHERE ....
ORDER BY ....

где label формируемые псевдонимы подключаемых таблиц и их полей. Результатом запроса будут записи сгруппированные по дереву, которые в цикле можно разобрать формируя html-код меню или иное требуемое.
Ответить с цитированием