我有一个PHP页面,它从数据库表中提取数据并回显。但是当表格列大小为1000到5000或更多时,页面加载速度太慢,需要几分钟。
我正在尝试在页面底部添加一个视图更多链接,每100个帖子中显示更多链接,一旦点击就会查看另外100个帖子。
我知道由于某些原因我不想采用的分页。
希望我能清楚地解释我的情况。
我的代码到目前为止:
<html>
<head>
<?php include('db.php'); ?>
</head>
<body>
<?php
$page = 0;
if(isset($_GET["Page"])){
$page = $_GET["Page"];
}
$sql2 = "SELECT * FROM smf_log_digest WHERE note_type = 'topic' ORDER BY id_msg DESC";
$result2 = $conn->query($sql2);
if ($result2->num_rows > 0) {
while($row2 = $result2->fetch_assoc()) {
$number = $row2["id_msg"];
?>
<?php
$sql3 = "SELECT * FROM smf_messages WHERE id_msg = $number AND id_board = 4 LIMIT 100 OFFSET " . $page * 100;
$result3 = $conn->query($sql3);
if ($result3->num_rows > 0) {
while($row3 = $result3->fetch_assoc()) {
$member = $row3["id_member"];
$replies = $row3["id_topic"];
?>
<script>
var page = 0;
function GetData(){
page++;
var xhr = new XMLHttpRequest();
xhr.open('GET', "/getData?page="+page, true);
xhr.send();
xhr.onreadystatechange = processRequest;
function processRequest(e) {
if (xhr.readyState == 4) {
<?php echo substr($row3['body'], 0, 150); ?>
}
}
}
</script>
<?php }
} else {
echo "";
}
?>
<?php }
} else {
echo "";
}
?>
<div onclick="GetData()">Show More</div>
</body>
</html>
正如我所提到的那样,查询可以很好地从表中提取所有数据,但是我想将其限制为100并给出一个&#34;查看更多&#34;每100个帖子底部的按钮显示。
感谢任何帮助。
答案 0 :(得分:1)
修改您的查询以包含“页面”计数器,该计数器将作为“显示更多”的点击次数来计算查询的偏移量。
$page = 0;
if(isset($_GET["Page"])){
$page = $_GET["Page"];
}
"SELECT * FROM smf_messages WHERE id_msg = $number AND id_board = 4 LIMIT 100 OFFSET " . $page * 100;
现在,JavaScript,向你的php页面发出请求,我称之为'getData',并在计数器中包含Get参数。
var page = 0;
function GetData(){
page++;
var xhr = new XMLHttpRequest();
xhr.open('GET', "/getData?page="+page, true);
xhr.send();
xhr.onreadystatechange = processRequest;
function processRequest(e) {
if (xhr.readyState == 4 && xhr.status == 200) {
// Append the results here.
}
}
}
您希望在每次点击DOM时运行此功能。
<div onclick="GetData()">Show More</div>
请注意,这是一个示例,您需要进行一些修改以满足您的目的。因为你没有提供任何html,所以你不可能编写完整的代码而且我不想为你编写整个代码(HTML等):),所以你去吧。
编辑:使用JQuery可以简化Ajax调用以及附加结果,但是当您将其标记为JavaScript时,我提供了一个没有它的解决方案。
编辑:
将您的PHP代码放到一个名为getData.php的新文件中,并将其保留在root上(例如用途)
<?php
$page = 0;
if(isset($_GET["Page"])){
$page = $_GET["Page"];
}
$sql2 = "SELECT * FROM smf_log_digest WHERE note_type = 'topic' ORDER BY id_msg DESC";
$result2 = $conn->query($sql2);
if ($result2->num_rows > 0) {
while($row2 = $result2->fetch_assoc()) {
$number = $row2["id_msg"];
}
}
$sql3 = "SELECT * FROM smf_messages WHERE id_msg = $number AND id_board = 4 LIMIT 100 OFFSET " . $page * 100;
$result3 = $conn->query($sql3);
if ($result3->num_rows > 0) {
while($row3 = $result3->fetch_assoc()) {
$member = $row3["id_member"];
$replies = $row3["id_topic"];
}
}
?>
修改您的Ajax请求,URL现在将变为“/getData.php?page =”+ page,
现在,一旦获得了返回的数据,就可以追加它。
看看这个功能
function processRequest(e) {
if (xhr.readyState == 4 && xhr.status == 200) {
// Append the results here.
}
}
您可以使用document.body.innerHTML +=
所以你的最终功能现在将成为
function processRequest(e) {
if (xhr.readyState == 4 && xhr.status == 200) {
document.body.innerHTML += xhr.responseText;
}
}
我在你的php文件中添加了结束括号以关闭while循环和if语句。 如果你不想使用括号,你需要确保你从来没有打开它们以避免语法错误,如果你没有放括号但是只有下一行将对应loop / if语句,如果你是不知道。
快乐学习。