cotonti.com : Модуль pages и structure https://www.cotonti.com Последние сообщения в теме Cotonti en Thu, 06 Nov 2025 14:43:20 -0000 Macik #37044 esclkm:

Для внутренних проекторв можно сделать join

Вот это конструктивно. 

ладно, будет время, набью тестовыми данными сайт - потестирую…

]]>
вт, 19 фев 2013 20:26:07 -0000
esclkm но это не корректное решение... путь категории в отличие от кода меняется чаще

like работает очень не быстро

длинна строки запроса и ее скорость не совсем симметричные понятия

делать like а потом not in - както не галлантно... и это не сократит, а наоборот увеличит расходы.

Для внутренних проекторв можно сделать join

]]>
вс, 17 фев 2013 09:27:14 -0000
Macik Да собственно, оправдываться тут нечего... Просто еще давно поднимались вопросы по поводу:

а. Скорости работы при большом количестве категорий.

б. В принципе, корретной работы движка при больших объемах данных

]]>
сб, 16 фев 2013 23:03:32 -0000
esclkm ну это не оправдание.

]]>
пт, 15 фев 2013 17:30:55 -0000
Macik #37028 esclkm:

еще 1 но: а кто права учитывать будет... ведь дело не в длинне строки

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

Да и все равно еще надо делать фильтр по дате страницы, ее статусу и прочим параметрам.

]]>
пт, 15 фев 2013 16:44:20 -0000
esclkm еще 1 но: а кто права учитывать будет... ведь дело не в длинне строки

]]>
пт, 15 фев 2013 15:35:04 -0000
Macik #37019 esclkm:
Like самый медленный. Я против такого.

Добавлено 44 секунды спустя:

Да у в моих проектах дерево часто меняется:-)

Да пожалуй на счет скорости соглашусь. На счет изменений дерева, так. тут нет большой разницы обновлять 1 поле или 2.

А вот, что меня смущает в текущем механизме работы с категориями, так это вся структура категорий с их свойствами грузиться массив structure, который постоянно находится в памяти. Что при значительном количестве категорий может быть проблемой.

 

Добавлено 16 часа спустя:

И все же…

Еще помыслил на счет LIKE. Вот пример - инет-магазин количество категорий несколько сотен (700-800), достаточно разветвленное дерево и нам надо провести поиск в определенном разделе сайта включая все его подразделы (их может быть десятки, а может и сотни).

При испотзовании IN (запросы пишу упрощенно просто для понимания) :

SELECT * from cot_pages where page_cat in ('раздел1','подраздел11','подраздел12','подраздел111','подраздел112','подраздел113','подраздел121',…);

Сталкиваемся с тем, что запрос начинает весить очень много, не говоря о том, что каждая дополнительная категория приводит к почти линейному росту времени на выполнение запроса.

У «медленного» на старте LIKE такой зависимости нет, и уже при достаточно небольшом количестве категорий для поиска, LIKE начнет обгонять указанный выше пример.

SELECT * from cot_pages where page_pathcat LIKE '1.%';

Еще есть вариант (хотя не уверен, что он обгонит LIKE):

SELECT * from cot_pages where substr(page_pathcat,1,2) = '1.';

 

 

]]>
чт, 14 фев 2013 15:07:26 -0000
esclkm Добавлено 44 секунды спустя:

Да у в моих проектах дерево часто меняется:-) ]]>
ср, 13 фев 2013 18:59:07 -0000
Eugene Хорошая мысль.

изменений тоже, видимо, не много. Это новое поле будет обновляться при всяком обновлении страницы, то есть дополнительных обработок не нужно...

]]>
ср, 13 фев 2013 14:43:41 -0000
Macik Сейчас в таблице `cot_pages` есть поле `page_cat`,  в котором хнаниться код категории, которой принадлежит страница.

Поймал себы на мысли, что часто очень не хватает поля, вкотором бы содержался не код категории и путь этой категории (который мы записываем как цифры разделенные точками). И вот почему - это был бы удобный инструмент для выборки страниц из определенных категорий ().

Очень распространенная задача выбрать все страницы из категории и ее подкатегорий. Сейчас решается вызовом `cot_structure_children` (и.т.п), и последующими запросами вида select * … where page_cat in ('1.1','1.2','1.3','1.4', …). 

Кудап проще было бы просто сделать запрос "… where page_cpath LIKE '1.%'".

Опять же имяя под рукой путь категории этой страницы можно в одну строку получить путь корневой категории или путь родительской: 

$root_path = array_shift( explode( '.', $page_cpath) ); 
$parent_path = substr($page_cpath, 0, strrpos($page_cpath, '.') );

 

 

 

]]>
ср, 13 фев 2013 13:21:50 -0000