代码之家  ›  专栏  ›  技术社区  ›  Borja

如何使用Ajax调用从MySQL中分离最大的数组?

  •  1
  • Borja  · 技术社区  · 8 年前

    我有一个大问题:在我的网站上会有一个页面,其中有一个表单,用户可以选择日期和其他选项来查看世界上发生的地震。

    例如,问题是,如果用户可以查看去年发生的地震。 这个选项将返回一个非常大的数组,我认为这会减慢加载速度,并且浏览器可能对文件有限制。

    那么,我怎样才能拆分这个大数组呢?

    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 回复  |  直到 8 年前
        1
  •  2
  •   samanime    8 年前

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

    一般来说,当您有某个列表,而该列表可能非常大时,一种常见的技术是实现“ pagination “。从字面上看,把它变成多页。

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

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

    例如,如果要每页显示200个结果,则 极限 是200。如果您在第3页,那么您可以将偏移设置为 (page-1)*max ,应该是 (3-1)*200 400 . 这将得到从结果400到200的结果。

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

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

    SELECT COUNT(1) FROM earthquakes WHERE milliseconds > 0
    

    然后,您只需显示这个和您的页面控件,就可以完成所有设置。

        2
  •  0
  •   Eriks Klotins    8 年前

    使用 limit offset 实现分页。

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