如何使用Ajax调用从MySql拆分最大数组?

时间:2018-05-29 12:10:04

标签: javascript php jquery 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"
});
你可以给我一些建议吗? 非常感谢,对不起我的英语......

2 个答案:

答案 0 :(得分:2)

虽然这个问题有点宽泛,但我可以给出一些相当标准的建议,这些建议可以帮助你指明正确的方向。

一般来说,当你有一些东西的列表,并且该列表可能非常大时,一种常见的技术是实现" pagination"。从字面上看,把它变成多页。

这样做的一般方法是以某种方式传入页面参数(通常在查询字符串中),然后使用它来获取一定数量的结果。

在查询方面,您可以使用LIMIT设置最大值,然后使用page参数设置OFFSET

例如,如果您要在每页显示200个结果,那么您的LIMIT就是200.如果您在第3页,那么您可以将偏移设置为(page-1)*max,这将是(3-1)*200400。这将从结果400开始得到结果并获得200。

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

除此之外,还返回最大结果数,因此您可以在前端构建适当的UI:

SELECT COUNT(1) FROM earthquakes WHERE milliseconds > 0

然后,您只需显示此页面和页面控件,您就可以全部设置。

答案 1 :(得分:0)

使用limitoffset来实施分页。

但是,您可以将用例分为“探索少数地震”和“探索许多地震”。因此,第一个可以返回包含所有细节的完整列表,另一个将返回,例如,热图。热图在后端生成,不涉及将所有行发送到前端。 一个用例或另一个用例由与过滤器匹配的行数触发。