@dmitriu256

Как объединить два запроса COUNT и LIMIT?

Что хочу получить (подгрузка новостей по нажатию кнопки)
Изначально хочу загрузить с сервера (express js) три новости, далее по нажатию кнопки показывать еще + 1 новость.
Когда новость последняя - скрыть кнопку "Показать еще"
(логика на клиенте ясна)

Теперь запросы к БД
1) Получаем количество записей в таблице
SELECT COUNT(*) FROM news

2) Ставлю ограничение на выборку
SELECT * FROM news LIMIT ${req.params.from}, ${req.params.lim}

Далее при нажатии на кнопку с клиента идет AJAX запрос и меняем LIMIT

Код сервера
app.get('/news/:from/:lim', (req,res) => {
    connection.query(`SELECT  * FROM news LIMIT ${req.params.from}, ${req.params.lim}`, function(error, rows) {
        if(error) throw new  Error(error);
        res.json(rows);
    });
});

app.get('/news', (req,res) => {
    connection.query(`SELECT COUNT(*) FROM news `, function(error, rows) {
        if(error) throw new  Error(error);
        res.json(rows);
    });
});


Итог как оптимизировать запросы,
Сейчас логика такова
1) Запрос с LIMIT 0,3 - загрузили первые три новости
2) Запрос на получение количества записей в таблице COUNT
3) Запрос по нажатию кнопки - изменяем LIMIT 4, 1
При следующем клики повторятся шаги 2 и 3(LIMIT 5,1)

Можно ли все эти действия объединить в один запрос ?
Как хочу сделать
при каждом возврате новостей сервер отдаёт общее количество новостей (COUNT), оставшееся количество новостей и текущий порядковый номер новости (для использования в LIMIT)

При таком раскладе я постоянно буду знать порядковый номер текущей новости и LIMIT(news_now+1) не будет превышать COUNT.
Снизиться нагрузка на сервер - вместо 3 запросов будет один
Как это реализовать?
Буду благодарен за помощь!
  • Вопрос задан
  • 86 просмотров
Пригласить эксперта
Ответы на вопрос 1
SagePtr
@SagePtr
Еда - это святое
Учитывая, что новости у всех посетителей сайта одни и те же, их заголовки можно банально запросить один раз и хранить всё это в кэше, а при добавлении/изменении новости - сбрасывать кэш.
Это будет явно лучшей оптимизацией, чем вместо двух тривиальных запросов делать один.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы