我遇到了一个大问题:我的网站上会有一个页面,用户可以选择日期和其他选项来查看世界上发生的地震。
问题是,例如,用户是否可以查看去年发生的地震。 这个选项将返回一个非常大的数组,我认为这会减慢加载速度,也许浏览器可能会限制文件。
那么我怎么能拆分大阵列?
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"
});
你可以给我一些建议吗?
非常感谢,对不起我的英语......
答案 0 :(得分:2)
虽然这个问题有点宽泛,但我可以给出一些相当标准的建议,这些建议可以帮助你指明正确的方向。
一般来说,当你有一些东西的列表,并且该列表可能非常大时,一种常见的技术是实现" pagination"。从字面上看,把它变成多页。
这样做的一般方法是以某种方式传入页面参数(通常在查询字符串中),然后使用它来获取一定数量的结果。
在查询方面,您可以使用LIMIT
设置最大值,然后使用page参数设置OFFSET
。
例如,如果您要在每页显示200个结果,那么您的LIMIT
就是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
然后,您只需显示此页面和页面控件,您就可以全部设置。
答案 1 :(得分:0)
使用limit
和offset
来实施分页。
但是,您可以将用例分为“探索少数地震”和“探索许多地震”。因此,第一个可以返回包含所有细节的完整列表,另一个将返回,例如,热图。热图在后端生成,不涉及将所有行发送到前端。 一个用例或另一个用例由与过滤器匹配的行数触发。