@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
Еда - это святое
Учитывая, что новости у всех посетителей сайта одни и те же, их заголовки можно банально запросить один раз и хранить всё это в кэше, а при добавлении/изменении новости - сбрасывать кэш.
Это будет явно лучшей оптимизацией, чем вместо двух тривиальных запросов делать один.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы