id = 1 | name = "name" | submenu = 0
id = 2 | name = "name" | submenu = 0
id = 3 | name = "name" | submenu = 1
id = 4 | name = "name" | submenu = 1
id = 5 | name = "name" | submenu = 2
Как я делаю выборку из базы. Написал функцию проверяющую есть ли подменю для определенного меню, например для меню с id = 1 и если есть то рекурсивно вызываю функцию которую опишу далее.
Основная функция выводит меню из базы через цикл и вызывает функцию описанную ранее после каждого прохода цикла.
Примерный ход событий: Выводит первый пункт меню и тут же проверяет есть ли подменю для данного меню. Если есть, то рекурсивно вызывает вторую функцию. Далее выводит вторую запись из меню и проделывает тоже самое.
В итоге получается что запросов не сосчитать. Ну давайте посчитаем запросы с примера выше:
1. Запрос выводит первую запись.
2. Проверяет нет ли у нее подпунктов.
3-6. Подпункты найдены и функция выводит эти подпункты, параллельно проверяя нет ли в этих подпунктах своих подпунктов. Тут будет 4 запроса в базу.
7-10. Проделывает что и в первом случае только для этого пункта меню.
В итоге примерно 10 запросов для всего лиш 5 пунктов меню. Если их будет скажем 10-15. Это уже очень много запросов.
---
Для тех кто не понял или не захотел читать описание сразу вопрос:
Как можно организовать вывод данных из базы данных и по мере нахождения подпункта выводить его.