Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Многостраничный вывод на PHP, используя запрос к MySQL лишь один раз.
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » Многостраничный вывод на PHP, используя запрос к MySQL лишь один раз.

Страниц (1): [1]
 

1. bluser - 23 Апреля, 2017 - 09:16:15 - перейти к сообщению
Есть большая MySQL база с множеством таблиц и в каждой таблице до 10 млн. записей ($bd).
Некоторые SQL($sql) запросы отрабатывается по несколько минут.
Получаем некий результат: $ result = mysqli_query ($bd, $sql).
В отдельном файле организуется вывод данных ($ result) в таблицу htmlв цикле:
while ($myrow= mysqli_fetch_assoc ($result)) {…}
Получается тысячи строк.
Задача: организовать вывод величины $ result с разбиением постранично, типа: 1 2 3 4 5 6 7 8 ... >
ОДНАКО: НЕЛЬЗЯ ИСПОЛЬЗОВАТЬ В ПОСТРАНИЧНОМ ВЫВОДЕ SQLЗАПРОСЫ К БАЗЕ ДАННЫХ, ТАК КАК КАЖДЫЙ ЗАПРОС И ЛЮБОЙ LIMITБУДЕТУТ ОТНИМАТЬ БОЛЬШОЕ ВРЕМЯ.
Иными словами: запрос SQL($sql) должен случаться 1 раз, а результат этого запроса ($ result) должен разбиваться и выводиться в многостраничном формате.
2. Мелкий - 23 Апреля, 2017 - 10:14:40 - перейти к сообщению
http://use-the-index-luke[dot]com/no-offset
Т.е. передавайте последний встреченный элемент данных с предыдущей страницы и читайте limit записей от него при той же сортировке.

bluser пишет:
Есть большая MySQL база

bluser пишет:
таблице до 10 млн. записей ($bd).

Это мелкая база.

bluser пишет:
запрос SQL($sql) должен случаться 1 раз, а результат этого запроса ($ result) должен разбиваться

В этом случае вам нужно вычитать весь результат запроса и сохранить его куда-то ещё в другое место. В подарок куча проблем с обновлением этого кеша, живущего отдельно от СУБД. Но, так тоже можно делать, да.

 

Powered by ExBB FM 1.0 RC1