Доброго времени!
Немного о задаче:
Необходимо реализовать выборку статей в зависимости от выбранного раздела:
Разделы имеют древовидную структуру с неограниченной вложенностью, в бд таблица разделов имеет поля id & parent_id, которые реализуют всю древовидность.
Сами статьи привязываются только к "конечным" разделам, которые не имеют подразделов.
Пример структуры разделов:
Раздел 1
Т.е. если выбран Раздел 1, то нужно получить id Разделов 1.1.1, 1.1.2, 1.2.1, 1.3.1 и вывести все статьи, которые к ним привязаны. Проблема в том как это реализовано: Выбираются в начале айдишники детей Раздела 1, потом айдишники их детей, итого 4 запроса(в конкретном случае). Но на реальной базе в больших разделах до 100-500 запросов. Плюс выборка статьей по через section_id IN (массив из 100+ элементов) долгое занятие.
Вопрос:
Как увеличить скорость работы, т.к. страница в итоге загружается за 10-15 секунд.
Делаю так строю массив(дерево)загоняю в кеш потом...
Можно сделать так:
В табличку с разделами добавить поле path, которое будет содержать путь от корневой до текущей категории.
Например в твоем примере у каждого раздела id от 1 до 8. Тогда поле path для Раздел 1.1.1 будет таким 1-2-3 При клике на Разделе 1 все id дочерних разделов будут выбраны таким запросом:
SELECT *
FROM table
WHERE path LIKE "$id%";
Таким образом у тебя будет только один запрос)
Сборка персонального компьютера от Artline: умный выбор для современных пользователей