开始时的大免责声明:我仍然是php&的新手。 js,所以请温柔......哈哈
无论如何,我试图创建一个简单的无限滚动来检索mysql表中的帖子。我将来自各种互联网教程的代码拼凑在一起,创建了一些正在访问和检索信息的东西。问题是帖子的数量以及它检索的内容。
使用" $ perpage"在PHP文件设置为10,前20个帖子加载,然后每次加载"新帖子",它只是一遍又一遍地加载帖子11-20。我想它可能很简单,但是我的PHP& js实际上只是在我可以理解它阅读的水平,但不能写它。
我尝试将LIMIT添加到$ sql行的末尾,但这似乎完全破坏了代码。
任何帮助将不胜感激!
如果您想在现实生活中看到这一点,那么(非常)草稿网站就在这里:site
$(document).ready(function(){
function getresult(url) {
$.ajax({
url: url,
type: "GET",
data: {rowcount:$("#rowcount").val()},
beforeSend: function(){
$('#loader-icon').show();
},
complete: function(){
$('#loader-icon').hide();
},
success: function(data){
$("#faq-result").append(data);
},
error: function(){}
});
}
$(window).scroll(function(){
if ($(window).scrollTop() == $(document).height() - $(window).height()){
if($(".pagenum:last").val() <= $(".total-page").val()) {
var pagenum = parseInt($(".pagenum:last").val()) + 1;
getresult('../php/best_result.php?page='+pagenum);
}
}
});
});
<?php
require_once("login.php");
$db_handle = new DBController();
$perPage = 10;
mysql_query("SET NAMES utf8");
$sql = '
SELECT letter, dayfield, monthfield, yearfield, nickname, country
FROM BestWorst
WHERE `lettertype` = "best" ORDER BY `ID` DESC';
$page = 1;
if(!empty($_GET["page"])) {
$page = $_GET["page"];
}
$start = ($page-1)*$perPage;
if($start < 0) $start = 0;
$query = $sql . " limit " . $start . "," . $perPage;
$faq = $db_handle->runQuery($query);
if(empty($_GET["rowcount"])) {
$_GET["rowcount"] = $db_handle->numRows($sql);
}
$pages = ceil($_GET["rowcount"]/$perPage);
$output = '';
if(!empty($faq)) {
$output .= '<input type="hidden" class="pagenum" value="' . $page . '" /><input type="hidden" class="total-page" value="' . $pages . '" />';
foreach($faq as $k=>$v) {
$output .= '<div class="entry wow fadeInUp lefttext"><br/><p>'
. nl2br($faq[$k]["letter"])
. '</p><br/><p class="small" align="right">- This story took place on '
. $faq[$k]["dayfield"] . '/'
. $faq[$k]["monthfield"] . '/'
. $faq[$k]["yearfield"]
. '. Posted by ' . $faq[$k]["nickname"]
. ' from ' . $faq[$k]["country"]
.'<p></div><br/><br/><br/>';
}
}
print $output;
?>
答案 0 :(得分:1)
您对查询中$start
和$perPage
的使用有点疑惑。
在MySQL中,以下查询获得前15个结果,从该组结果中的第11行(OFFSET 10
)开始:
SELECT * FROM BestWorst LIMIT 15, 10
与
相同SELECT * FROM BestWorst LIMIT 15 OFFSET 10
您的案例中$start
的使用应该映射到查询的OFFSET
,而$perPage
在MySQL术语中实际上是LIMIT
。
因此,在查询中交换两个提到的变量应该可以解决问题。
$query = $sql . " limit " . $perPage . "," . $start;
现在,当您向下滚动页面,并在pagenum
变量中获取$page
(通过AJAX发送到PHP脚本)的值时,$start
会相应地相乘,您查询的0, 10, 20, ...
部分的值(OFFSET
) - 这正是您所期望的。