Как можно разделить самый большой массив из MySql с помощью вызова Ajax?

У меня большая проблема: на моем веб-сайте будет страница с формой, где пользователь сможет выбрать дату и другие параметры для просмотра землетрясений, произошедших в мире.

Проблема в том, что, например, пользователь может просматривать землетрясения, произошедшие в прошлом году. Эта опция вернет очень большой массив, и я думаю, что это замедлит загрузку, и, возможно, браузер может иметь ограничение для файла.

Итак, как я могу разбить большой массив?

PHP

$query = "SELECT * FROM earthquakes WHERE milliseconds > 0";
$query = mysqli_query($con,$query);

if ($result = mysqli_query($con, $query)) {
   while ($row = mysqli_fetch_assoc($result)) { // fetches a result row as an associative array
       $result[] = $row;
   }
   mysqli_free_result($result);
}

echo json_encode($result); // return value of $result
mysqli_close($con); // close connection with database

JAVASCRIPT

$.ajax({
    type: "POST",
    url: "database-sismico.php?"+query,
    success: function (result) { //Performs an async AJAX request
        if (result) {

        }
        else {
            //will print alert to advice user that there aren't quakes
        }
    },
    dataType:"json"
});

Вы можете мне что-нибудь предложить? Большое спасибо и извините за мой английский ...

Либо нарежьте массив в коде SQL, выбрав TOP X, и сохраните индекс где-нибудь. Или загрузите весь массив на веб-сайт и нарежьте его там перед рендерингом результата.

Shilly 29.05.2018 14:18

Дайте им первые 10 и сделайте ссылку на следующие 10. Посмотрите на нумерацию страниц.

user3783243 29.05.2018 14:18
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
46
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Хотя это довольно общий вопрос, я могу дать несколько довольно стандартных советов, которые помогут указать вам правильное направление.

В общем, когда у вас есть какой-то список чего-либо, и этот список, возможно, очень большой, распространенным методом является реализация "разбивка на страницы". Буквально превратить его в несколько страниц.

Общий подход к этому состоит в том, чтобы каким-то образом передать параметр страницы (обычно в строке запроса), а затем использовать его для получения определенного количества результатов.

На стороне запроса вы можете сделать это, используя LIMIT, чтобы установить максимум, а затем использовать параметр страницы, чтобы установить OFFSET.

Например, если вы собираетесь отображать 200 результатов на странице, тогда ваш LIMIT равен 200. Если вы находитесь на странице 3, вы должны установить смещение как (page-1)*max, то есть (3-1)*200 или 400. Это даст результаты, начиная с результата 400 и заканчивая 200.

SELECT * FROM earthquakes WHERE milliseconds > 0 OFFSET 400 LIMIT 200

Наряду с этим также возвращайте максимальное количество результатов, чтобы вы могли создать правильный пользовательский интерфейс в интерфейсе:

SELECT COUNT(1) FROM earthquakes WHERE milliseconds > 0

Затем вы просто отображаете это и элементы управления своей страницей, и все будет готово.

хм, это хорошая идея, но у меня есть сомнения .... как вы думаете, возможно ли показать следующие 200 результатов, когда загружены первые 200 результатов? Я не хочу разбивать страницу на несколько страниц .... извините за мой английский

Borja 29.05.2018 14:42

Да, вы можете просто заставить JavaScript выполнять последующие вызовы после загрузки одного набора, чтобы он загружался постепенно. Это будет тот же подход для SQL, только ваш JavaScript выполняет вызовы в разное время.

samanime 29.05.2018 17:06

Используйте limit и offset для реализации разбивки на страницы.

Однако вы можете разделить свой вариант использования на «Изучение нескольких землетрясений» и «Изучение многих». Таким образом, первый может вернуть полный список со всеми деталями, а другой вернет, скажем, тепловую карту. Тепловая карта создается на сервере и не включает отправку всех строк на фронтенд. Тот или иной вариант использования запускается количеством строк, соответствующих фильтру.

Другие вопросы по теме