Можно ли ограничить возвращаемые результаты, но оставить «нумерацию страниц» таблицей?

0

Я создаю php-сайт, используя jquery и плагин DataTables. Моя страница выложена так же, как она должна выполняться с разбивкой по страницам, но при работе с большими наборами данных я заметил, что сервер тянет ВСЕ возвращенные строки, а не 10-кратное (может быть больше) ограничение, указанное на каждой странице.

Возможно ли ограничить результаты запроса и, тем не менее, сохранить идентификационные номера этих результатов в памяти, поэтому, когда пострадает страница 2 (или номер результата изменен), запрашиваются только новые данные?

Имеет ли смысл делать это так?

Я просто не хочу запрашивать DB с 2000 возвращаемыми строками, а затем иметь "front-end-plugin", чтобы он выглядел так, как будто другие результаты скрыты, когда они правдиво на странице с самого начала.

Теги:
datatables

1 ответ

1
Лучший ответ

Предложение LIMIT в SQL имеет две части - предел и смещение.

Чтобы получить первые 10 строк:

SELECT ... LIMIT 0,10

Чтобы получить следующие 10 строк:

SELECT ... LIMIT 10,10

Чтобы получить следующие 10 строк:

SELECT ... LIMIT 20,10

До тех пор, пока вы ЗАВЕРШЕНО, чтобы результат был установлен одинаковым каждый раз, вам абсолютно не нужно (и не хотеть) сначала попросить базу данных отправить вам все 2000 строк.

Чтобы отобразить подкачку в сочетании с этим, вам все равно нужно знать, сколько полных строк соответствует вашему запросу. Есть два способа справиться с этим -

1) Запросить подсчет строк с помощью отдельного запроса

SELECT COUNT(*) FROM table WHERE ...

2) Используйте подсказку SQL_CALC_FOUND_ROWS в вашем запросе, которая подскажет MySQL рассчитать, сколько строк соответствует запросу, прежде чем возвращать только 10, которые вы просили. Затем вы получаете запрос SELECT FOUND_ROWS() для получения этого результата.

SELECT SQL_CALC_FOUND_ROWS column1, column2 ... LIMIT 0,10

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

  • 0
    Я должен немного не согласиться. По моему опыту реализации этого на нескольких сайтах вариант 1 для получения общего количества на самом деле предпочтительнее. Использование SQL_CALC_FOUND_ROWS с множеством ошибок и SQL_CALC_FOUND_ROWS MySQL, в том числе уничтожить любой выигрыш в производительности при выполнении предложения LIMIT .
  • 0
    Спасибо за вашу помощь в первую очередь. Я знаком с предложением LIMIT, но проблема, с которой я сталкиваюсь, заключается в том, как на самом деле хранить эти отдельные записи, возвращаемые в какой-то момент переменной данных, особенно без дополнительной загрузки страницы. Плагин DataTables на самом деле имеет примеры на стороне сервера, но они кажутся такими старыми и используют более старые вызовы sql, поэтому их вообще почти невозможно расстроить (не говоря уже о проблемах с форматами datetime и json). Похоже, мне придется немного поэкспериментировать.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню