Сортировка по кол-ву доков в папке

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

Спасибо.

11 комментариев

avatar
Вешаем на OnDocFormSave мини плагин который берёт выборку из нужной категории и считает дочерние через getAllChildren. Результат пишем в любое поле, лучше из site_content типа того-же menu_index. Сортируем доклистером по этому полю.
avatar
А не лучше сделать выборку с помощью DBAPI?
avatar
Вопрос нагрузки. Если быстро и на коленке, делаем сниппет, который выбирает нужные id в нужном порядке и скармливаем DocLister documents=`` с указанием параметра sortType=`doclist`
Но в первом случае (с плагином) нагрузка будет сильно меньше. Нет необходимости перестраивать индекс каждый раз.
avatar
Конечно можно написать монстр запрос к базе данных который базу нагрузит. Но в данном конкретном случаи это легковесный запрос не напрягающий базу. Да если вывод в Doclister то можно использовать &orderBy.
avatar
Вопрос в количестве. Представьте себе магазин на 8-10К позиций и всё)
avatar
Я бы тоже плагином сохранял количество дочерних в отдельный тв и не парился
avatar
Так, для сервера базы данных 8-10k это даже не нагрузка. Даже если у клиента 10к родителей и в каждом по 100к дочерних документов сортировка ORDER BY COUNT(`c`.`*`) ASC пройдет за секунду.
avatar
Несомненно, но вы действительно занимаетесь на практике такими вещами?
1 секунда это ОООчень много, это 1000 мс.
Представим что у нас меню из 20 пунктов. Для каждого надо посчитать количество дочерних.
Это 20 запросов к базе. Это + 200-300 мс на обычном хостинге.
С учётом того что запросов к базе всего(!) я стараюсь не делать больше 15-20 на страницу, а генерация должна бы укладываться в 500 мс, то это чёто много.
То-есть даже по генерации мы прибавляем +50% нагрузки на пустом месте. Прикинем посещалку всего лишь 3-5 К и пятоктаких вот вещей выталкивает нас на collocation
avatar
На практике у меня максимальное количество 45к товаров, у каждого 10 TV параметров. (Похвастался немного). Конечно 1000 мс это очень много, но я хотел сказать что сортировка будет очень быстрой. Если у нас меню из 20 пунктов то вовсе необязательно делать 20 запросов к базе данных. (Кстати я говорил о 10к родителях, то конечно 10к запросов не уложится в приемлемое время, на медленном хостинге) Безусловно всё зависит от конкретной ситуации. В данной задаче (как я её понял) выборку и сортировку можно провести одним запросом.
Комментарий отредактирован 2019-02-06 12:05:09 пользователем Redduck
avatar
Как вариант, смотрим как сделан экстендер jotcount и делаем также, только для подсчета дочерних :)
avatar
Здравствуйте!
Пусть не ругают меня програмеры :-)
Можно в эту сторону посмотреть, чтобы на странице выводить таблицу, и уже сортировать — вот tablesorter.ru/docs/
  • tmih
  • +1
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.