Спасибо за замечания) > но есть два момента, из-за которых вы делаете два запроса вместо одного и > Нет смысла дополнительно вначале проверять общее число записей в таблице, это можно определить из второго запроса. Тут тоже на самом деле не всё так просто. Возможно, что у человека, кто потом заберет этот код себе - не будут созданы индексы по фильтрации, которая у меня заложена в методе %%(php)filtered()%%, поэтому %%(sql)SELECT%% может оказаться в разы медленнее, чем %%(sql)COUNT%%. Но это спорно, конечно. > %%(php)if (count($this->query) > 0) {%% > Это может вызывать повторный запрос, т.е. Это из оригинального кода пагинатора) И это не sql query, это get query parameters > внутри paginator будет делаться два запроса (нужно проверить). Смотрел через debugbar - делается всего 1 count-запрос, не 2. > Здесь вы вначале делаете запрос с COUNT, дальше без, но с LIMIT. А зачем первый запрос вообще нужен? Первый запрос для того, чтобы выдать 404 ошибку. Как уже выше писал - это из-за скорости (в любом случае COUNT будет быстрее SELECT), поэтому для проверки несуществующих страниц, имхо, лучше использовать его - чтобы не "насиловать" сервер в случае DDOS. Но если переписать код, используя вашу мысль - можно в перспективе сделать кеширование гораздо красивее, чем ещё более сильнее обезопасится от тупого DDOS.